Angular 设置为 属性 时计算表达式
Angular evaluate expression when set as a property
例如你有以下内容:
$scope.element =
{
html: '<a type="button" class="btn btn-xs btn-rounded m-r-sm"><i class="icon icon-user-unfollow"></i></a>',
classExpression : " {{inactive == 'true' ? 'btn-success': 'btn-danger'}}",
}
如您所见,我们有一个名为 classExpression
的变量,它是我希望附加到元素
的表达式
<span ng-bind-html="element.html | trust" class="{{element.classExpression}}">Text in between<span>
但是它不评估它。
所以我的问题是这怎么可能(如果可能的话)
更新了我的 fiddle(没用)
您可以直接使用 ng-class 而不是将其绑定到元素表达式吗?无论您的 scope.inactive 发生什么变化,它都会被重新评估(或者您可以将非活动元素绑定到您的元素。
例如
<span ng-bind-html="element.html | trust" ng-class="{'btn-success' : element.inactive, 'btn-danger' : !element.inactive}">Text in between<span>
在 Angular 1.1.4 和更新版本中,您还可以使用三元运算符
<span ng-class="element.inactive ? 'btn-success' : btn-danger">
这里假设您将 inactive 放在元素绑定上。您可以直接绑定到您的非活动状态(而不是在范围内)。
您需要从 'classExpression'
中删除 {{ }}
,就像 -
classExpression : " inactive == 'true' ? 'btn-success': 'btn-danger'"
也可以像-
一样使用ng-class
ng-class="{{element.classExpression}}"
可能使您的 classExpression 成为一个函数:
$scope.element =
{
html: '<a type="button" class="btn btn-xs btn-rounded m-r-sm"><i class="icon icon-user-unfollow"></i></a>',
classExpression : function(){
return $scope.inactive == 'true' ? 'btn-success': 'btn-danger';
}
}
我想重构您的对象以具有以下结构。我真的不鼓励您将表达式放入 string
.
HTML
<span ng-bind-html="element.html" ng-class="element.classExpression[element.inactive]">
Text in between
</span>
代码
$scope.element = {
html: '<a type="button" class="btn btn-xs btn-rounded m-r-sm"><i class="icon icon-user-unfollow"></i></a>',
classExpression: {
'true': 'btn-success',
'false': 'btn-danger'
},
inactive: 'true'
};
例如你有以下内容:
$scope.element =
{
html: '<a type="button" class="btn btn-xs btn-rounded m-r-sm"><i class="icon icon-user-unfollow"></i></a>',
classExpression : " {{inactive == 'true' ? 'btn-success': 'btn-danger'}}",
}
如您所见,我们有一个名为 classExpression
的变量,它是我希望附加到元素
<span ng-bind-html="element.html | trust" class="{{element.classExpression}}">Text in between<span>
但是它不评估它。
所以我的问题是这怎么可能(如果可能的话)
更新了我的 fiddle(没用)
您可以直接使用 ng-class 而不是将其绑定到元素表达式吗?无论您的 scope.inactive 发生什么变化,它都会被重新评估(或者您可以将非活动元素绑定到您的元素。
例如
<span ng-bind-html="element.html | trust" ng-class="{'btn-success' : element.inactive, 'btn-danger' : !element.inactive}">Text in between<span>
在 Angular 1.1.4 和更新版本中,您还可以使用三元运算符
<span ng-class="element.inactive ? 'btn-success' : btn-danger">
这里假设您将 inactive 放在元素绑定上。您可以直接绑定到您的非活动状态(而不是在范围内)。
您需要从 'classExpression'
中删除 {{ }}
,就像 -
classExpression : " inactive == 'true' ? 'btn-success': 'btn-danger'"
也可以像-
一样使用ng-class
ng-class="{{element.classExpression}}"
可能使您的 classExpression 成为一个函数:
$scope.element =
{
html: '<a type="button" class="btn btn-xs btn-rounded m-r-sm"><i class="icon icon-user-unfollow"></i></a>',
classExpression : function(){
return $scope.inactive == 'true' ? 'btn-success': 'btn-danger';
}
}
我想重构您的对象以具有以下结构。我真的不鼓励您将表达式放入 string
.
HTML
<span ng-bind-html="element.html" ng-class="element.classExpression[element.inactive]">
Text in between
</span>
代码
$scope.element = {
html: '<a type="button" class="btn btn-xs btn-rounded m-r-sm"><i class="icon icon-user-unfollow"></i></a>',
classExpression: {
'true': 'btn-success',
'false': 'btn-danger'
},
inactive: 'true'
};