2013-08-08 15 views
6
angular.module('mainApp'). 
    controller('dynamicRouteController', ['$scope', '$controller', '$routeParams', function($scope, $controller, $routeParams) { 
    if(/^\d+$/.test($routeParams.pageOrName)) { 
     $scope.controller = $controller('thisController', { $scope: $scope }).constructor; 
     $scope.templateUrl = '/www/thisPage'; 
    } else { 
     $scope.controller = $controller('thatController', { $scope: $scope }).constructor; 
     $scope.templateUrl = '/www/thatPage'; 
    } 
    }]); 

to minifies do:

"use strict"; 
angular.module("mainApp"). 
controller("dynamicRouteController",["$scope",‌​"$controller","$routeParams",function(a,b,c){ 
/^\d+$/.test(c.pageOrName)? 
(a.contro‌​ller=b("thisController",{$scope:a}).constructor,a.templateUrl="/www/thisPage"): 
(a‌​.controller=b("thatController",{$scope:a}).constructor,a.templateUrl="/www/thatPa‌​ge") 
}]) 

to problemy minifying, myślę, że ze względu na {$ zakresu: $ zakres} zostać zmieniona. .. Po raz pierwszy wpadłem na to/skorzystałem z tej metody. Ktoś wie lepszy sposób, aby to napisać, aby poprawnie funkcjonować?

EDYTOWANIE: więc, co się dzieje, jest to, że przechodzi {$ zakres: a}, który jest w porządku, ale na tym kontrolerem, do którego się odwołuje, gdy jego minifikacja, że ​​$ zakres stał się a lub b lub e, w zależności ... więc jeśli napiszę kod "wstępnie minifikowany", co oznacza, że ​​dosłownie znajduję, co litera reprezentuje $ scope w innym kontrolerze, mogę ją uruchomić, ale to jest takie hacky! Znowu jakieś pomysły?

Używanie Grunta do zminimalizowania Angular 1.0.5 ... może naprawiony w późniejszych wersjach?

2nd EDIT: Przyzwoitą odpowiedzią jest wrzucenie obu kontrolerów do tego samego pliku, jawnie ... co jest brzydkie ... ale działa! więc w jednym kontrolerze deklaruję 2 subkontrolery, które są lame. Jeśli znasz inny sposób, podziel się z innymi!

+1

Po prostu zgaduje się tutaj, ale '{" $ scope ": $ scope}'? – Phil

+0

Dobra rozmowa Phil, próbowałem tego bezskutecznie, chociaż :( – mclenithan

+1

Istnieje komentarz do kontrolera ['$ controller'] (http://docs.angularjs.org/api/ng.$controller), który ma' { $ scope: {}} '. Give that a try – Phil

Odpowiedz

3

Pracowałem w tej sprawie z @mclenithan i co wymyśliliśmy to:

$scope.controller = ['$scope', 'service1', 'service2', 
    $controller('thisController', { $scope: $scope }).constructor]; 

Głównym problemem było kontrolery thisController i thatController miał więcej parametrów niż tylko $scope wstrzyknięcia (w tym przykładzie spodziewa się service1 i service2).

Urządzenie $controller(...).constructor zwróciło minified funkcję kontrolera z parametrami zmienionymi na a, b, c, d, itd. Kiedy Angular próbował utworzyć instancję kontrolera, miał problemy z odnalezieniem właściwych usług do wstrzyknięcia.

Użycie funkcji array notation zamiast samej kontrolera rozwiązało problem. Zobacz a note on minification w samouczku, aby uzyskać więcej informacji.

Zobacz także this question w kontekście tego, co próbowaliśmy zrobić, aby rozpocząć.

Powiązane problemy