2016-03-18 2 views
1

Вопрос: У меня есть два контроллера Dog and Cat. Если я сменю имя собаки, тогда цикл цикла digest и Cat также обновят здесь представление из-за метода {{ctrl.getTime()}}. Это большая проблема для больших приложений, которые загружают все контроллеры и не используют ng-if или state. В нашем текущем приложении у нас есть много мест, где мы используем методы внутри шаблонов, а что хуже, мы загружаем и инициализируем все контроллеры приложений и не используем состояния или ng-if, мы используем только ng-show. Я знаю, какое лучшее решение для использования свойств, но мне интересно, может ли он указывать угловое значение $ digest только для области видимости DogCtrl, а не для всех областей приложения?AngularJs разрешает переваривать только текущий объем

HTML

<div ng-app="myApp"> 
    <div ng-controller="DogCtrl as ctrl"> 
     <h3>DogCtrl</h3> 
     Dog name: <input ng-model="ctrl.name" />{{ctrl.name}} 
    </div> 
    <hr /> 
    <div ng-controller="CatCtrl as ctrl"> 
     <h3>CatCtrl</h3> 
     Cat getTime: {{ctrl.getTime()}} {{ctrl.random}} 
    </div> 
</div> 

Javascript

var myApp = angular.module('myApp',[]); 
myApp.controller('DogCtrl', DogCtrl); 
myApp.controller('CatCtrl', CatCtrl); 

function DogCtrl() { 
     this.name = 'Doggy'; 
} 

function CatCtrl() { 
     this.getTime = function() { 
      return new Date().getTime(); 
    } 
} 

Fiddle: http://jsfiddle.net/nvgofo46/1/

+0

изменен ваш код чуть ниже в скрипте, в основном я чувствую, что область видимости отсутствует http://jsfiddle.net/GomesNayagam/fnqcv86j/2/ – Gomes

+0

могу ли я узнать, почему вы использовали 'ctrl.getTime()' непосредственно на html? вы хотели обновлять его каждый раз? –

+0

@PankajParkar несколько раз удобнее иметь метод like isActive() и логику вычисления места в этом методе вместо того, чтобы иметь дело с собственностью в большом количестве от мест, но для этого случая я просто добавил, что он показывает, какой угловой оценивать представление CatCtrl, которое не было изменено вообще. –

ответ

1

Изменить HTML на это:

<div ng-controller="CatCtrl as ctrl"> 
    <h3>CatCtrl</h3> 
    Cat getTime: {{ctrl.currentTime}} {{ctrl.random}} 
</div> 

И изменить контроллер к т его:

function CatCtrl() { 
    this.getTime = function() { 
     return new Date().getTime(); 
    } 
    this.currentTime = this.getTime(); 
} 

Как правило, старайтесь не иметь функций в вашем представлении. Потому что функции будут выполняться на каждом дайджесте. Более эффективно привязываться к модели и соответствующим образом обновлять модель.

Я мог бы удалить эту функцию и просто установить this.currentTime = new Date(). GetTime(), но это не значит, что это упражнение.

+0

Да, вы правы, я добавил вызов метода только для того, чтобы показать, что угловые оценивают все функции в представлениях каждый цикл дайджеста. Возможно, невозможно определить угловой 1 для оценки только измененного объема. Я прочитал один хороший пост об обнаружении изменения углового 2, и он швы, как эта проблема больше не будет exsist http://blog.thoughtram.io/angular/2016/02/22/angular-2-change-detection-explained.html –

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