2013-08-10 2 views
1

Эти отображаются, чтобы работать одинаково. Но так ли они? (Примечание $ scope.active)Свойства, которые зависят от другого объекта с проверкой

Первый один:

angular.module('my.controllers', []).controller('MyController', ['$scope', 'myService', 
function($scope, myService) { 
    $scope.myFilters = myService.myFilters; 
    $scope.active = $scope.myFilters.length > 0; 
    $scope.$watch(function() { 
     return myService.myFilters; 
    }, function(newFilters) { 
     $scope.myFilters = newFilters; 
     $scope.active = $scope.myFilters.length > 0; 
    },true); 
}]); 

Второй один:

angular.module('my.controllers', []).controller('MyController', ['$scope', 'myService', 
function($scope, myService) { 
    $scope.myFilters = myService.myFilters; 
    $scope.active = function(){return $scope.myFilters.length > 0}; 
    $scope.$watch(function() { 
     return myService.myFilters; 
    }, function(newFilters) { 
     $scope.myFilters = newFilters; 
    },true); 
}]); 

ответ

1

Когда связывание с active в HTML во втором сценарии, он будет называться на каждый цикл применения-дайджест, потому что результат функции неизвестен до вызова. Это дает вам две отличия: изменения в $scope.myFilters.length после выполнения функции контроллера не будут отражены в привязке в первом сценарии (если вы не обновите значение самостоятельно), и будет (хотя и минимальная) производительность попадания в второй сценарий из-за того, что функция называется не менее после каждого цикла применения-дайджест.

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