一些赋值运算符在 AngularJS 表达式中不起作用.. 为啥不呢?

Posted

技术标签:

【中文标题】一些赋值运算符在 AngularJS 表达式中不起作用.. 为啥不呢?【英文标题】:Some assignment operators don't work in AngularJS expressions.. why not?一些赋值运算符在 AngularJS 表达式中不起作用.. 为什么不呢? 【发布时间】:2013-07-23 04:05:19 【问题描述】:

AngularJS 文档只列出了 Angular 表达式和 JS 表达式 (docs) 之间的四个区别:

    属性评估(针对范围而不是全局窗口); 原谅(对undefinednull); 不允许使用控制流语句; 过滤器(表达式评估的结果可以通过过滤器链传递)。

但算术赋值运算符也不能在表达式中工作。例如,“plus-equals”+= 和“minus-equals”-= 会在等号后面的常量上引发错误。

这些赋值运算符在表达式中允许存在问题是否有特殊原因?或者这仅仅是实施优先级的问题?

是否存在特定于 Angular 的递增和递减方式?目前,人们似乎只能输入完整的somelongname = somelongname + x,或者将增量和减量定义为控制器中的函数。其他算术赋值运算符也是如此。

我使用递增和递减作为解决方法的一个简短示例。它有效,但它优雅吗?

在控制器中:

$scope.incr = function(number, constant)
    $scope[number] += constant;
;
$scope.decr = function(number, constant)
    $scope[number] -= constant;
;

html 中:

<button class="btn" ng-disabled="currentPage == 0" ng-click="decr('currentPage', 1)">

【问题讨论】:

您似乎指的是角度视图表达式(您可以在实际视图中的 标记中执行的操作)。 Angular 允许在视图中发生一些事情,但更喜欢在控制器、指令或服务中发生大部分繁重的工作。也许如果您在视图表达式中解释了您要实现的目标,我们可以给出更好的答案。 文档中的术语非常清楚:“表达式是类似 javascript 的代码 sn-ps,通常放置在 expression 等绑定中。表达式由 $parse 服务处理。”我想要实现的是将$scope 中的数字变量增加和减少ng-click="..."。如果我理解正确,... 中给出的表达式和作为指令值(例如ng-click)的表达式将被类似地评估。 【参考方案1】:

这些赋值运算符在表达式中允许存在问题是否有特殊原因?或者这仅仅是实施优先级的问题?

我会说这是一个组合

    实施优先级(参见 v1.2 中的Brad and Igor video talking about expression support)和 @Sharondio 在上面的评论中提到:视图通常不是表达式的位置 - 控制器是。

【讨论】:

以上是关于一些赋值运算符在 AngularJS 表达式中不起作用.. 为啥不呢?的主要内容,如果未能解决你的问题,请参考以下文章

Angular js 表达式在 Node js 项目中不起作用

为啥加号运算符在 JavaScript 的正则表达式中不起作用? [复制]

为啥在java中不允许没有括号的赋值和布尔运算符

为啥三元运算符在我的代码中不起作用?

将文件附加到 FormData 在 angularjs 中不起作用

Ajax 调用在 angularjs 中不起作用