更改范围变量AngularJS的值

时间:2018-08-17 17:11:17

标签: javascript angularjs angularjs-directive

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"却不起作用-我仍然得到了一个字符串)?

有可能吗?

谢谢。

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),那是无效的语法)