为什么这个$ apply in directive是抛出值未定义的错误

时间:2013-02-15 06:59:10

标签: angularjs

我正在尝试使用角度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

2 个答案:

答案 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++; };
}