2015-08-10 5 views
0

РассмотримУгловые прицелы и привязки данных к директиве

angular.module('App').directive('errors',function() { 
return { 
restrict: 'A', 
controller:function() { 
    var self = this; 
    self.closeErrors = function() { 
     self.errors = []; 
     self.hasErrors = false; 
    } 
}, 
controllerAs: 'errorsCtrl', 
templateUrl: 'errors.html' 
} 

при вызове с

<div errors="otherCtrl.errors"></div> 

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

scope: {errors:"="}, 

, а затем получить доступ к нему в мой контроллер через

$scope.errors; 

но когда я назначить его

self.errors = $scope.errors. 

self.errors никогда не обновляется, когда это изменено в родительском.

Так что мой вопрос в том, как я могу позволить этой работе, что, когда мой родительский контроллер меняет объект ошибок, он также изменяется в errorsCtrl.

(Кроме того, я знаю, что могу получить доступ к ошибкам непосредственно в шаблоне без контроллера, но я просто хочу использовать errorsCtrl)

+0

Почему бы вам просто не использовать $ scope для каждой переменной в контроллере? – Shomz

+0

Насколько я читаю начиная с 1.4, они пытаются избавиться от $ scope и особенно для 2.0, поэтому я хочу сделать это с помощью var self = таким образом. – woutervs

ответ

2

Добавить bindToController: true в вашей директиве.

http://blog.thoughtram.io/angularjs/2015/01/02/exploring-angular-1.3-bindToController.html

Угловая 1,3 вводит новое свойство к определению директивы объекта под названием bindToController, который делает именно то, что он говорит. Когда устанавливается в true в директиве с изолированной областью действия, которая использует controllerAs, свойства компонента привязаны к контроллеру, а не к области.

Это означает, Угловой убеждается, что, когда контроллер инстанцирован, начальные значения выделенных привязок области видимости являются доступны на этом, и будущие изменения также автоматически доступны.

+0

Это было именно то, что мне нужно было знать :) – woutervs

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