AngularJS 数据绑定

AngularJS data-binding

我有两个运行良好的代码示例,但我不明白其中的区别。 所以,第一个是:

AngularJS:

$scope.state = {presentation: true};

HTML:

<div ng-class="{{state.presentation}} ? 'on' : 'off'"></div>

还有第二个一个:

AngularJS:

$scope.presentation = true;

HTML:

<div ng-class="presentation ? 'on' : 'off'"></div>

为什么我不能在第二个例子中使用这样的东西:

<div ng-class="{{presentation}} ? 'on' : 'off'"></div>

当我将 {{ }} 与 $scope.presentation = true; 一起使用时,它在 ng-class 中不起作用,但我可以像文本一样使用 {{presentation}},我的意思是 <div>{{presentation}}</div> 效果很好。为什么?

但是有了 $scope.state = {presentation: true}; 我什至可以在 ng-class 中使用 {{presentation}} 并且效果很好。

有什么区别?

你不应该像那样在 ng 属性中使用表达式。它会失败(没有或没有状态对象):

Error: [$parse:syntax] Syntax Error: Token '?' not a primary expression at column 2 of the expression [ ? 'on' : 'off'] starting at [? 'on' : 'off'].

这很正常,因为 angularJs 将其作为 angularJS expression 执行,所以当您输入时:

<div ng-class="presentation ? 'on' : 'off'"></div>

内部angularJS将其作为表达式执行,也可以这样写:

<div class="{{presentation ? 'on' : 'off'}}"></div>