【发布时间】:2014-12-17 19:07:10
【问题描述】:
在我的指令中,我有一个控制器变量,当您按下指令中的按钮时页面会递增。但是,调用控制器函数的下一行scope.alertPage() 并未反映此更改。请注意,当您单击按钮页面时仍会提示为 1!
我知道我可以通过在控制器中添加 $scope.$apply 来解决此问题,但随后我收到错误消息,指出摘要已经发生。
app = angular.module('app', []);
app.controller('myCtrl', function($scope) {
$scope.page = 1;
$scope.alertPage = function() {
alert($scope.page);
}
})
app.directive('incrementer', function() {
return {
scope: {
page: '=',
alertPage: '&'
},
template: '<button ng-click="incrementPage()">increment page</button>',
link: function(scope, elem, attrs) {
scope.incrementPage = function() {
scope.page += 1;
scope.alertPage();
}
}
}
})
html模板:
<body ng-app='app' ng-controller='myCtrl'>
page is {{page}}
<incrementer page='page' alert-page='alertPage()'></incrementer>
</body>
【问题讨论】:
-
将其置于 $timeout 或以 2 方式绑定到具有该属性的对象。由于它是 2 路绑定,因此原始的 2 路绑定值将仅在下一个摘要循环期间更新。即尝试
$timeout(scope.alertPage)或其他方式,您可以在您的控制器集$scope.page = {value : 1}中尝试并在指令中执行$scope.page += 1;并休息您正在做的任何事情
标签: angularjs angularjs-directive