9

我在 div 上有以下属性:ng-show="state.name === 'index'"。我也试过ng-show='state.name === "index"了,但我不断收到以下错误:

语法错误:标记“ "index"”是表达式第 16 列中的意外标记,[state.name === "index"]从 开始["index"]

为什么?

4

3 回答 3

17

ng-show接受“AngularJS 语句”。这种类型的语句只有一个==运算符,但这个运算符的行为类似于===. 这有点令人困惑,但很方便,因为你不能用奇怪的类型强制射击自己。

于 2012-10-22T05:28:33.307 回答
3

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

<span ng-init="if(state.name == 'o'){doFoo();}">o</span>
于 2012-10-21T15:16:15.840 回答
1

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

请参阅此处对提出问题时(1.1.0)最新版本的 OP 问题的重现:

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 版中修复的,因为更改日志提到:

  • $parse: 允许角度表达式中的严格相等 (a179a9a9, #908)

脚注:我已经将上述内容作为问题的答案。如果您赞成我的回答,那不幸的是,这可能意味着您像我一样使用搜索查询登陆该线程,只是发现您遇到的“意外令牌”错误不是由 OP 在这里遇到的问题引起的...

于 2016-06-13T09:05:41.577 回答