ng-init覆盖选择选项中的ng-model(添加了plunker)

时间:2016-07-27 23:52:00

标签: javascript angularjs angularjs-scope

https://plnkr.co/edit/RgGzgGkBPaxvKHNE688K?p=preview

在上面的例子中,我很难对选择选项进行编码,并通过ng-init属性初始化为颜色'red'。我想在页面加载时显示颜色“红色”默认值。

 <select ng-model="mycolor" ng-init="mycolor = 'red'">
      <option>red</option>
      <option>green</option>
    </select>

在控制器中,我将'mycolor'更新为'green',但由于ng-init属性,selectbox仍显示'red'。 (我这样做是因为mycolor将从后端检索到)

app.controller('MainCtrl', function($scope) {
  $scope.mycolor = 'green';
});

如何解决这个问题?简而言之,我想要实现的是,我想在页面加载的选择框中显示红色默认值,如果后端的mycolor发生任何变化,它应该被覆盖为新颜色。就我而言,它是绿色的。

2 个答案:

答案 0 :(得分:4)

你可以做到

<select ng-model="mycolor" ng-init="mycolor = mycolor || 'red'">

如果有值,mycolor模型将设置为自身,否则默认为'red'

plunker。我有一个5秒的超时时间将颜色更改为蓝色以模拟后端更改为例。

答案 1 :(得分:0)

问题是ngInit是一个指令,角度寿命基本上是

  1. 编译
  2. 控制器
  3. 前链路
  4. 链路交
  5. 因此你不能在指令中“覆盖”控制器中的某些东西(除非它专门使用编译)。

    将观察者置于任何需要改变和观察者回调改变'mycolor'

    之上似乎更合乎逻辑