2015-05-08 4 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 - это ручка этого черного ящика. – harrrrrrry

+1

Не нужно вводить частные методы в область действия. Отодвиньте их в службу, доступную где угодно – charlietfl

ответ

0

"Область является связующим звеном между контроллером приложений и просмотра." (взято из https://docs.angularjs.org/guide/scope).

Я не особо люблю этот способ кодирования. Я бы поставил только то, что хочу получить из представления, или то, что я хотел бы использовать в дочернем контроллере.

0

Помимо переноса данных между представлением и контроллером, объект $ scope также отвечает за наблюдение, произошли ли какие-либо изменения (на модели). Наблюдатели автоматически назначаются угловыми элементами, заключенными между двойными фигурными фигурными скобками или могут быть явно объявлены через $ scope. Метод $ watch(). $ scope также несет ответственность за распространение изменений.

Помните, что все данные, присвоенные $ scope, автоматически становятся доступными для просмотра. Поэтому назначьте разумно.

0

$ scope «женится» на контроллере. $ scope также рассматривается как модель представления в архитектуре mvvm. ОК не только сохраняет все в $ scope ОК, но это его красота. Сохранение всего в объекте $ scope делает его доступным для просмотра без необходимости его получения с помощью $ scope. Например, $ scope.foo можно называть как foo в представлении.

Смежные вопросы