2016-05-17 9 views
0

私はangulajsプロジェクトでアイテムをビューに一度だけバインドします。要素を一度バインドする方法は?

ここはplunkerです。ここで

テンプレートHTML:

<div class="form-group"> 
    <div class="col-xs-8"> 
    <span ng-repeat="city in ma.cities" class="view" ng-if="city.Id == ma.selected"> 
      {{::city.Name}} 
    </span> 

    <select class="form-control" 
    ng-model="ma.selected" 
    ng-options="city.Id as city.Name for city in ma.cities"> 

    </select> 
    </div> 
</div> 

私はcity.Nameは一度だけHTMLをテンプレートにバインドすることにしたいです。 しかし、select要素の項目を変更すると、city.Nameも更新されるという問題があります。

バインドオペレータ::を一度使用しようとしましたが、役に立たなかったです。

要素をビューに一度だけバインドする方法と、更新を防ぐ方法はありますか?

+1

'ng-repeat =" city in :: ma.cities "' – YOU

答えて

2

値は変更されません。 ng-repeatの中にネストされていて、都市が変更されたときに表示されるアイテムが変更された場合。

もしあなたがやろうとしていることは、現在選択されている都市をコントローラが作成されたときにコントローラのプロパティに保存し、そのプロパティを表示してng-repeatとng-if過程の中で。

1

私はに同意します。マイク、質問は少し曖昧です。その後、

<span>{{::ma.cities[ma.selected].Name}}</span> 

しかし、再び、マイクが言ったように、あなたは別のスコープ変数を持つことを達成した可能性があり、それはおそらくより明確に解決策になる:私は何を求めていることだと思います。

+0

選択したインデックスの代わりにIdを選択した場合はどうなりますか? – Michael

+0

だからこそ、** Mike **のアプローチが優れているのです。あなたは本当にコントローラでこれを処理する必要があります。あなたが* Id *しか持っていない場合は、あなたの都市を繰り返して、選択したIdによって都市を見つける必要があります。 –

0

私はHTMLテンプレートを修正advicedとして:ここで

<span ng-repeat="city in ::ma.cities" class="view" ng-if="::city.Id == ma.selectedId"> 
       {{city.Name}} 
     </span> 

plunkerです。