更改范围变量的值 AngularJS
Change the value of scope variable AngularJS
tl;dr:更改范围变量的值并基于此重新呈现指令。如果我使用 isAccepted: '=?'
I receive Expression used with directive '' is non-assignable!
如果我使用 isAccepted: '@'
它不起作用(isAccepted 值更改,但视图不重新显示。
这是我的 playerView 的范围:
scope: {
isAccepted: '=?',
player: '='
},
如果isAccepted=true
我想显示带有绿色图标的div(否则我会显示带有灰色图标的div)以显示玩家的视图:
<div class="player-green-container" ng-if="::ctrl.isAccepted">
<div class="player-gray-container" ng-if="::!ctrl.isAccepted">
问题是,如果用户按下一个图标,我希望它显示另一个 div(灰色 -> 绿色,绿色 -> 灰色),所以如果用户按下灰色图标,我们应该改变this.isAccepted
的值(我已经做了)和(最重要的部分)我没能成功:重新渲染 .html
指令。
UPD:指令中的一些代码:
<div class="player-list">
<comment-view class="player-list-item"
player="p"
is-accepted="ctrl.playerIds.indexOf(p.id) > -1"></comment-view>
</div>
在我的控制器中,我有以下内容:
@export {boolean}
this.isAccepted;
这是我的指令:
当我替换 @ with =
console.log(this.isAccepted)
输出 true 或 false,但是如果我替换 = with @
console.log 输出输出字符串值:"ctrl.playerIds.indexOf(p.id) > -1"
有什么方法可以强制它计算为 true/false(仍然使用“@”)(我试过 eval()
但它不起作用 - 我仍然得到一个字符串)?
可能吗?
谢谢。
如果您想使用 @
作为绑定方法,请在 html 中将 is-accepted
更改为:
<div class="player-list">
<comment-view class="player-list-item"
player="p"
is-accepted="{{ctrl.playerIds.indexOf(p.id) > -1}}">
</comment-view>
</div>
将您的代码放在 {{brackets}}
中将对其进行评估。如果您随后想要通知您的 parent 已进行更改,请创建一个回调方法,例如 acceptedChanged='&'
.
您在使用 =
时出现 "is not assignable" 错误的原因是因为 ctrl.playerIds.indexOf(p.id) > -1
不是您可以分配给的变量。 (想象一下 ctrl.playerIds.indexOf(p.id) > -1 = (something)
,那是无效的语法)
tl;dr:更改范围变量的值并基于此重新呈现指令。如果我使用 isAccepted: '=?'
I receive Expression used with directive '' is non-assignable!
如果我使用 isAccepted: '@'
它不起作用(isAccepted 值更改,但视图不重新显示。
这是我的 playerView 的范围:
scope: {
isAccepted: '=?',
player: '='
},
如果isAccepted=true
我想显示带有绿色图标的div(否则我会显示带有灰色图标的div)以显示玩家的视图:
<div class="player-green-container" ng-if="::ctrl.isAccepted">
<div class="player-gray-container" ng-if="::!ctrl.isAccepted">
问题是,如果用户按下一个图标,我希望它显示另一个 div(灰色 -> 绿色,绿色 -> 灰色),所以如果用户按下灰色图标,我们应该改变this.isAccepted
的值(我已经做了)和(最重要的部分)我没能成功:重新渲染 .html
指令。
UPD:指令中的一些代码:
<div class="player-list">
<comment-view class="player-list-item"
player="p"
is-accepted="ctrl.playerIds.indexOf(p.id) > -1"></comment-view>
</div>
在我的控制器中,我有以下内容:
@export {boolean}
this.isAccepted;
这是我的指令:
当我替换 @ with =
console.log(this.isAccepted)
输出 true 或 false,但是如果我替换 = with @
console.log 输出输出字符串值:"ctrl.playerIds.indexOf(p.id) > -1"
有什么方法可以强制它计算为 true/false(仍然使用“@”)(我试过 eval()
但它不起作用 - 我仍然得到一个字符串)?
可能吗?
谢谢。
如果您想使用 @
作为绑定方法,请在 html 中将 is-accepted
更改为:
<div class="player-list">
<comment-view class="player-list-item"
player="p"
is-accepted="{{ctrl.playerIds.indexOf(p.id) > -1}}">
</comment-view>
</div>
将您的代码放在 {{brackets}}
中将对其进行评估。如果您随后想要通知您的 parent 已进行更改,请创建一个回调方法,例如 acceptedChanged='&'
.
您在使用 =
时出现 "is not assignable" 错误的原因是因为 ctrl.playerIds.indexOf(p.id) > -1
不是您可以分配给的变量。 (想象一下 ctrl.playerIds.indexOf(p.id) > -1 = (something)
,那是无效的语法)