我正在尝试使用角度js编写指令,其中按钮点击必须增加count
值。
在click事件处理程序上,我试图使用scope.$apply
构造增加值,但它在控制台中抛出Syntax Error: Token 'undefined' not a primary expression at column NaN of the expression [count++] starting at [count++]
错误。
标记
<div ng-app="myApp">
<div ng-controller="MainCtrl">
<div my-directive >
</div>
</div>
</div>
JS
var myApp = angular.module('myApp', []);
myApp.directive('myDirective', function(){
return {
scope: {},
template: '<div>{{count}}</div><input type="button" class="increment" value="Increment" />',
link: function(scope, iElement, iAttrs, controller) {
console.log('link', scope.count)
iElement.on('click', '.increment', function(){
console.log('click', scope.count);
scope.$apply('count++');
})
},
controller: function($scope){
console.log('controller')
$scope.count = 0;
}
};
});
myApp.controller('MainCtrl', ['$scope', function($scope){
}]);
演示:Fiddle
答案 0 :(得分:4)
将表情改为
count = count + 1
解决了这个问题。演示:Fiddle
由于Angular不使用eval
来计算表达式,因此不能在其中使用全部JavaScript;这是其中一个例外。如果您做需要更强大的功能,可以将JavaScript函数传递给$apply
(演示:Fiddle):
scope.$apply(function() {
scope.count++;
});
答案 1 :(得分:3)
为什么不使用ng-click
?
<body ng-controller='MainCtrl'>
<button ng-click="increment()" value="Increment Me!">
<h1>{{count}}</h1>
</body>
在你的JS中:
function MainCtrl($scope) {
$scope.count = 0;
$scope.increment = function() { $scope.count++; };
}