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'; 
    } 
    }]); 

में $ नियंत्रक का उपयोग minification त्रुटियों को खत्म करने:कैसे जब यह minifies AngularJS

"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") 
}]) 

इस को कम करने में समस्या आ रही है, मैं की वजह से इसके बारे में सोच {$ गुंजाइश: $ scope} परिवर्तन किया जा रहा। .. पहली बार मैंने इस विधि में भाग लिया है/इस विधि का उपयोग किया है। किसी को इसे लिखने का एक बेहतर तरीका पता है, इसलिए यह सही ढंग से कम हो जाता है?

संपादित करें: तो क्या हो रहा है, यह है कि यह {$ स्कोप: ए} गुजर रहा है जो ठीक है, लेकिन उस संदर्भित नियंत्रक पर, जब यह छोटा हो गया है, तो $ गुंजाइश एक या बी या ई बन गया है ... इसलिए यदि मैं "प्री-मिनीफाइड" कोड लिखता हूं, जिसका अर्थ है कि मैं सचमुच पाते हैं कि कौन सा पत्र अन्य नियंत्रक में $ स्कोप का प्रतिनिधित्व करता है, तो मैं इसे काम पर ला सकता हूं, लेकिन यह इतना हैकी! फिर, कोई विचार?

minification कोणीय 1.0.5 के लिए ग्रंट का उपयोग करना ... शायद बाद के संस्करणों में तय हो गई?

2 संपादित करें: एक सभ्य जवाब एक ही फाइल में दोनों नियंत्रकों फेंकने के लिए, स्पष्ट रूप से है ... जो बदसूरत है ... लेकिन यह काम करता है! तो एक नियंत्रक के साथ, मैं 2 उप नियंत्रकों की घोषणा कर रहा हूं, जो लंगड़ा है। यदि आप किसी अन्य तरीके से जानते हैं तो कृपया कक्षा के साथ साझा करें!

+1

बस यहां एक जंगली अनुमान लग रहा है लेकिन '{" $ स्कोप ": $ स्कोप}'? – Phil

+0

अच्छा कॉल फिल, मैंने कोशिश की है कि कोई लाभ नहीं हुआ, हालांकि :( – mclenithan

+1

वहाँ है कि '{[' $ controller'] (http://docs.angularjs.org/api/ng.$controller) doco पर एक टिप्पणी है $ स्कोप: {}} '। इसे – Phil

उत्तर

3

मैं @mclenithan के साथ इस मुद्दे पर काम कर रहा था और हम के साथ आया है:

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

मुख्य मुद्दा नियंत्रकों thisController और thatController अधिक पैरामीटर सिर्फ $scope से इंजेक्षन करना पड़ा था (इस उदाहरण में यह service1 और service2 की अपेक्षा करता है)।

$controller(...).constructor मापित नियंत्रक फ़ंक्शन को ए, बी, सी, डी इत्यादि के नाम से पैरामीटर के साथ वापस कर रहा था। जब कोणीय नियंत्रक को तुरंत चालू करने का प्रयास कर रहा था तो उसे इंजेक्ट करने के लिए सही सेवाओं को खोजने का प्रयास करने में समस्याएं थीं।

array notation बजाय सिर्फ नियंत्रक समारोह का उपयोग कर समस्या का समाधान हो। अधिक जानकारी के लिए ट्यूटोरियल में a note on minification देखें।

इसके अलावा हम क्या के साथ शुरू करने के लिए कोशिश कर रहे थे पर संदर्भ के लिए this question देखते हैं।