2015-05-08 68 views
2

昨天,我看到我的同事寫了一個巨大的控制器,只有一個「上帝對象」$scope應該看起來像下面的代碼。

myApp.controller('ComplexController', ['$scope', function($scope) { 

$scope.firstTab = { 
    init: function() { 
     $scope.firstTab.data1.foo = $scope.firstTab.DefaultData1.foo; 

     $scope.$watch('firstTab.data1.foo', function(){ 
     // do something 
     }); 
    }, 
    defaultData1: { 
     foo: 'bar' 
    }, 
    data1: { 
     foo: 'bar', 
     publiclyUsedMethod1: function() {}, 
     publiclyUsedMethod2: function() {}, 
     privatelyUsedMethod1: function() {}, 
     privatelyUsedMethod2: function() {}, 
     privatelyUsedMethod3: function() {}, 
     privatelyUsedMethod4: function() {}, 
     privatelyUsedMethod5: function() {} 
    }, 
    data2: { 
     // Same code pattern as above 
    }, 
    data3: { 
     // Same code pattern as above 
    }, 
    data4: { 
     // Same code pattern as above 
    } 
    }; 

    $scope.secondTab = { 
    // Same code pattern as above 
    }; 

    $scope.thirdTab = { 
    // Same code pattern as above 
    }; 

    $scope.refresh = function(){ 
    // do something 
    }; 

    $scope.$watchCollection('[$scope.firstTab.data1.foo, $scope.secondTab.data1.foo, $scope.thirdTab.data1.foo]',function(newValues,oldValues){ 
    // some logic 
    $scope.refresh(); 
    }); 

    $scope.firstTab.init(); 
    $scope.secondTab.init(); 
    $scope.thirdTab.init(); 
}]); 

您認爲哪種模式? $scope對象的主要用途是什麼?可以將每個私人和公共對象存儲在$scope對象中嗎?

謝謝,

+0

可能的重複[在AngularJS中範圍原型/原型繼承的細微差別?](http://stackoverflow.com/questions/14049480/what-are-the-nuances-of-scope-prototypal-prototypical- inheritance-in-angularjs) –

+0

$ scope是這個angularjs黑盒子的句柄。 – harrrrrrry

+1

無需將私人方法放在範圍上。將它們推送到可在任何地方使用的服務 – charlietfl

回答

0

「範圍是應用控制器和視圖之間的粘合劑。」 (取自https://docs.angularjs.org/guide/scope)。

我不喜歡那種編碼方式。我只會把我想從視圖中訪問的內容或我想在子控制器中使用的內容。

0

除了在視圖和控制器之間傳輸數據外,$ scope對象還負責觀察是否有任何更改(在模型上)發生。觀察者由Angular自動分配在雙曲花括號之間的元素上,或者可以通過$ scope。$ watch()方法顯式聲明。 $範圍也負責傳播更改。

請記住,分配給$ scope的所有數據都可以自動查看。因此明智地分配。

0

$ scope將控制器「結婚」到視圖。 $ scope也被認爲是mvvm體系結構中的視圖模型。不僅存儲在$範圍內的所有東西都可以,但這就是它的優點。將所有內容存儲在$ scope對象中使其可用於查看,而不必使用$ scope來限定它。例如,$ scope.foo可以在視圖中被引用爲foo。

相關問題