AngularJS: необходимо ли привязывать все мои методы контроллера к $ scope

0

Когда нам нужно привязать метод к $ scope в контроллере, я имею дело с методами, которые являются просто отображением операции над объектом.

Example :
$scope.myVar = {};

     function myMyObject(x) {
          $scope.myVar = {
                  "xKey":x
           }

     }

    to 

    $scope.myMyObject = function(x) {
          $scope.myVar = {
                  "xKey":x
           }

     }

    myMyObject(10);
    $scope.myMyObject(10);
Is it necessary to bind $scope to myMyObject method here ?
  • 2
    нет. вам нужно использовать $ scope только для вызываемых методов или их необходимо вызывать из представления.
  • 0
    Нет, это не несессеры. Вы можете связать this и использовать синтаксис controllerAs в представлении - docs.angularjs.org/api/ng/directive/ngController#example
Теги:
scope
methods

4 ответа

1
Лучший ответ

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

В вашем конкретном сценарии нет необходимости связывать myMyoObject() с областью действия.

Изменить: вы можете вообще не использовать $ scope и использовать синтаксис controllerAs, и в этом случае вместо привязки к $ scope вы привязываетесь к этому. Негосударственные функции по-прежнему будут не привязаны ни к чему.

  • 2
    Вы можете добавить методы и переменные к this и это будет видно и в представлениях.
  • 0
    @ Омри Аарон: Спасибо :) Я согласен с вашей точкой зрения.
Показать ещё 3 комментария
1

В качестве хорошей практики вы можете объявить все свои функции в своем контроллере, а затем привязать к области $ только те функции, которые вам нужны.

Пример:

function _myHelperFunction(param) {
    //do some stuff
}

function myFunction(otherParam) {
    //do some stuff or use the _myHelperFunction
}

function myFunction2(otherParam) {
    //do some stuff or use the _myHelperFunction
}

function myFunction3(otherParam) {
    //do some stuff or use the _myHelperFunction
}

$scope.myFunction = myFunction
$scope.myFunction2 = myFunction2
$scope.myFunction3 = myFunction3

Или даже лучше с разрушением ES6

[$scope.myFunction, $scope.myFunction2, $scope.myFunction3] =
[myFunction, myFunction2, myFunction3]

Или:

angular.extend($scope, {
    myFunction,
    myFunction2,
    myFunction3
})
  • 0
    Идеально :) Мне понравился такой подход, чистый и аккуратный.
1

Только методы, определенные на объекте $ scope, доступны из HTML/view. Пример из ng-click, фильтров и т.д. -If ваш метод не требуется для доступа из html, тогда нет необходимости связывать его с $ scope.

  • 0
    как насчет директив?
  • 0
    Директивы @SidBhalke всегда видны из-за названия.
Показать ещё 2 комментария
0

Сохраняйте независимую функцию в самом контроллере.

Добавление всех функций в область $ будет влиять на производительность приложения в долгосрочной перспективе и в сложных приложениях с большими функциями

write в $ scope, только если вы хотите получить к нему доступ в html (view/partial) или в дочерних $ scopes

функция, написанная в родительском $ scope, доступна для дочерних $ scopes

Ещё вопросы

Сообщество Overcoder
Наверх
Меню