Javascript 更改范围变量AngularJS的值

Javascript 更改范围变量AngularJS的值,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,tl;dr:更改范围变量的值,并基于此重新提交指令。如果我使用isAccepted:“=?”我收到指令“”使用的表达式是不可赋值的如果我使用isAccepted:'@'它不起作用(isAccepted值更改,但视图不会重新运行) 以下是我的playerView的范围: scope: { isAccepted: '=?', player: '=' }, 如果isAccepted=true我想用绿色图标显示一个div(否则我用灰色图标显示一个div)以显示玩家的视图

tl;dr:更改范围变量的值,并基于此重新提交指令。如果我使用
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