根據約翰帕帕的style guide我已更新我的指令使用ControllerAs語法。但是在做完這些之後,當指令綁定到變量時,我的指令沒有更新。爲什麼雙向綁定不更新指令控制器
即當mainCtrl.rules更新,ctrl.rules的值不更新
爲了解決這個問題,我不得不建立在更新ctrl.rules變量的鏈接功能的手錶,當$ scope.rules變化。
這是爲什麼 - 指令和控制器不在同一範圍內?
HTML
<div my-directive rules="mainCtrl.rules"></div>
JS - 主要按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;
}
});
};
})();
模板
<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 2014-11-06 01:43:50
'controllerAs'確實是給你的控制器一個名字,以便你可以在你的模板中訪問它。所以你使用它的方式是不正確的。 – 2014-11-06 02:08:44
更新爲顯示這實際上是我在做什麼 – Kildareflare 2014-11-06 02:34:23