【发布时间】:2018-08-17 17:11:16
【问题描述】:
tl;dr:更改作用域变量的值并基于此重新呈现指令。如果我使用isAccepted: '=?'I receive Expression used with directive '' is non-assignable!如果我使用isAccepted: '@',它不起作用(isAccepted 值更改,但视图不会reren。
这是我的 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) 输出真假,但如果我替换 = with @ console.log 输出输出字符串值:"ctrl.playerIds.indexOf(p.id) > -1"
有什么办法可以强制它评估为真/假(仍然使用'@')(我尝试了eval(),但它不起作用 - 我仍然得到一个字符串)?
有可能吗?
谢谢。
【问题讨论】:
-
你能包含更多你的代码吗?具体来说,您使用的 html 代码包含您的指令。
-
@MichaelLynch 更新了一个问题:所以我想出了一种传递布尔值的方法,我相信它会起作用。
标签: javascript angularjs angularjs-directive