一些赋值运算符在 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) 之间的四个区别:
-
属性评估(针对范围而不是全局窗口);
原谅(对
undefined
和null
);
不允许使用控制流语句;
过滤器(表达式评估的结果可以通过过滤器链传递)。
但算术赋值运算符也不能在表达式中工作。例如,“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 的正则表达式中不起作用? [复制]