为什么AngularJS抱怨意外的标记在表达时,我尝试使用一个字符串?(Why is Angular

2019-07-01 14:38发布

我有一个div如下因素属性: ng-show="state.name === 'index'" 。 我也试着ng-show='state.name === "index" ,但我不断收到以下错误:

语法错误:令牌“ "index" ”是在表达的16列中的意外的标记[state.name === "index"]起始于["index"]

为什么?

Answer 1:

ng-show需要一个“AngularJS声明。” 这种类型的语句只有一个==操作符,但这个操作符的行为就像=== 。 这是一个有点混乱,但方便的,你不能搬起石头砸自己怪异的强制类型转换脚下。



Answer 2:

我发现这个问题。 而不是"state.name==='index'" ,我应该写"state.name=='index'" 。 pkoziowski.opensource是正确的,因为你不能使用条件语句,但他们的意思了,就是你不能用if语句,或任何控制流语句对于这个问题,所以你不能这样做:

<span ng-init="if(state.name == 'o'){doFoo();}">o</span>


Answer 3:

一个新的答案,现在可以为这个问题:你可能会使用旧版本AngularJS,因为新版本没有这个。

看到这里OP的问题与在有人问时间(1.1.0)的最新版本重现bug:

 angular.module("demo", []) .controller("myctrl", function($scope) { $scope.state = { name: "test" }; }); 
 <script src="https://code.angularjs.org/1.1.0/angular.js"></script> <div ng-app="demo" ng-controller="myctrl"> (this snippet explicitly errors out, reproducing OP's issue)<br> <input ng-model="state.name"> <div ng-show="state.name === 'test'">visible when "test" is in the input</div> Debug info: <pre>{{state | json}}</pre> </div> 

而在这里看到相同的代码,但1.5.6,在写这个答案的时间的最新版本版本

 angular.module("demo", []) .controller("myctrl", function($scope) { $scope.state = { name: "test" }; }); 
 <script src="https://code.angularjs.org/1.5.6/angular.js"></script> <div ng-app="demo" ng-controller="myctrl"> Working version<br> <input ng-model="state.name"> <div ng-show="state.name === 'test'">visible when "test" is in the input</div> Debug info: <pre>{{state | json}}</pre> </div> 

据推测,这是固定在2013,版本1.1.2,因为更改日志中提到:

  • $解析:允许角度表达全等(a179a9a9,#908)

脚注:我措辞上述作为问题的答案。 如果你upvoting我的回答,很遗憾,可能意味着你降落在这个线程与搜索查询像我,才发现了“意外的标记”错误你得到是不是造成问题的OP了这里...



文章来源: Why is AngularJS complaining about an unexpected token in an expression when I try to use a string?