Javascript 更改范围变量AngularJS的值
tl;dr:更改范围变量的值,并基于此重新提交指令。如果我使用Javascript 更改范围变量AngularJS的值,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,tl;dr:更改范围变量的值,并基于此重新提交指令。如果我使用isAccepted:“=?”我收到指令“”使用的表达式是不可赋值的如果我使用isAccepted:'@'它不起作用(isAccepted值更改,但视图不会重新运行) 以下是我的playerView的范围: scope: { isAccepted: '=?', player: '=' }, 如果isAccepted=true我想用绿色图标显示一个div(否则我用灰色图标显示一个div)以显示玩家的视图
isAccepted:“=?”
我收到指令“”使用的表达式是不可赋值的
如果我使用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">
在我的控制器中,我有以下功能:
@export {boolean}
this.isAccepted;
这是我的指示:
<div class="player-list">
<comment-view class="player-list-item"
player="p"
is-accepted="ctrl.playerIds.indexOf(p.id) > -1"></comment-view>
</div>
当我将@替换为=
console.log(this.isAccepted)时,
输出true或false,但如果我将=替换为@
console.log,则输出字符串值:“ctrl.playerIds.indexOf(p.id)>-1”
是否有任何方法可以强制它计算为true/false(仍然使用“@”)(我尝试了eval()
,但它不起作用-我仍然得到一个字符串)
可能吗
谢谢。如果您想使用
@
作为绑定方法,请在html中将更改为:
<div class="player-list">
<comment-view class="player-list-item"
player="p"
is-accepted="{{ctrl.playerIds.indexOf(p.id) > -1}}">
</comment-view>
</div>
将代码放置在{{方括号}
中将对其进行计算。如果您随后希望获得通知您的家长已进行更改,请创建一个回调方法,例如acceptedChanged='&
使用=
时出现“不可分配”错误的原因是ctrl.playerIds.indexOf(p.id)>-1
不是可以分配给的变量。(想象一下ctrl.playerIds.indexOf(p.id)>-1=(某物)
,这是无效的语法)你能包含更多的代码吗?特别是你正在使用的html代码包含你的指令。@MichaelLynch更新了一个问题:所以我想出了一种传递布尔值的方法,我相信它会起作用。谢谢,事实上我是自己随机得到的!剩下的唯一问题是,这个指令接受了的实际值
可以(true或false,我在onInit()中打印出来),但仍然都是绿色的(比如如果ng if不起作用)。有没有办法强制将其求值为布尔值?ng if=“ctrl.isAccepted”我相信它认为“false”有点像字符串。问题是isAccepted的实际值是正确的,但出于某种奇怪的原因,ctrl.isAccepted对每个播放器的计算结果都是true。我只是写下它作为字符串传递。您可以将@
更改为,如果=“ctrl.isAccepted==“false”,那么我可能会使用ng