В соответствии с style guide от John Papa У меня есть моя директива для использования синтаксиса ControllerAs. Однако после этого моя директива не обновилась, когда были внесены изменения в переменную, к которой была привязана директива.Почему двухсторонняя привязка не обновляет директивы контроллера
т.е. когда mainCtrl.rules обновляется, значение ctrl.rules не обновляется
Чтобы решить эту проблему, я должен был создать часы в функции связи, которая обновляет ctrl.rules переменную при $ scope.rules изменения.
Почему это - директива и контроллер не в той же области?
HTML
<div my-directive rules="mainCtrl.rules"></div>
JS - Main Ctrl
rulesService.get().then(mainCtrl.rules = response.rules;);
JS - Директива
(function() {
angular.module('myModule')
.directive('myDirective', myDirective);
myDirective.$inject = [];
function myDirective()
{
var directive = {
restrict: 'A',
scope: {
rules: '='
},
controller: 'myCtrl',
controllerAs: 'ctrl',
templateUrl: "/Template/myDirective",
transclude: true,
link: linkFunc
};
return directive;
};
angular.module('myModule')
.controller('myCtrl', myCtrl);
myCtrl.$inject = ['$scope'];
function myCtrl($scope)
{
var ctrl = this;
ctrl.rules = $scope.rules;
ctrl.showRules = false;
ctrl.toggleShowRules = toggleShowRules;
function toggleShowRules() {
ctrl.showRules = !ctrl.showRules;
};
};
function linkFunc($scope, $element, $attrs, ctrl)
{
//watch the rules collection on the directive and update controller if it changes
$scope.$watch("rules", function (newValue, oldValue) {
if(newValue != oldValue)
{
ctrl.rules = newValue;
}
});
};
})();
TEMPLATE
<div class="rules" ng-show="rules.length > 0">
<ul ng-show="ctrl.showRules">
<li ng-repeat="rule in ctrl.rules" class="rule-details">
<p>{{rule.title}}</p>
</li>
</ul>
</div>
Если вы хотите проголосовать, пожалуйста, по крайней мере, дайте комментарий о том, почему. Конструктивная обратная связь пожалуйста. – Kildareflare
'controllerAs' действительно предназначен для того, чтобы дать вашему контроллеру имя, чтобы вы могли получить к нему доступ в своих шаблонах. Таким образом, использование вами неверно. –
обновлено, чтобы показать, что это действительно то, что я делаю – Kildareflare