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(灰色->绿色,绿色->灰色),那么如果用户按下灰色图标,我们应该更改{{1 }}(我已经做过)和(最重要的部分)我没有设法工作:重新提交this.isAccepted
指令。
UPD :指令中的一些代码:
.html
在我的控制器中,我有以下内容:
<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 =
时输出true或false,但是如果我替换console.log(this.isAccepted)
console.log输出则输出字符串值:= with @
有什么办法可以迫使它评估为true / false(仍然使用'@')(我尝试了"ctrl.playerIds.indexOf(p.id) > -1"
却不起作用-我仍然得到了一个字符串)?
有可能吗?
谢谢。
答案 0 :(得分:-1)
如果要使用@
作为绑定方法,请在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}}
中将对其进行评估。如果您随后想要通知您的父母已进行更改,请创建一个回调方法,例如acceptedChanged='&'
。
使用=
时出现“无法分配”错误的原因是因为ctrl.playerIds.indexOf(p.id) > -1
不是可以分配给的变量。 (想象ctrl.playerIds.indexOf(p.id) > -1 = (something)
,那是无效的语法)