Angularのng-initの範囲は何ですか?これが私の質問を示す簡単な例です。
<div ng-init="model = { year: '2013'}">
<a href="" ng-click="model.year = '2012'">2012</a> | <a href="" ng-click="model.year = '2013'">2013</a>
<div>Showing {{ model.year }}</div>
<hr />
</div>
<div ng-init="model = { year: '2013'}">
<a href="" ng-click="model.year = '2012'">2012</a> | <a href="" ng-click="model.year = '2013'">2013</a>
<div>Showing {{ model.year }}</div>
</div>
ここで利用可能なライブの例: http://plnkr.co/edit/HkioewOzzglvFMKDPdIf?p=preview
Ng-initスコープは2つのdiv [ng-init]で共有されているようです。たとえば、「2012」年をクリックすると、両方のセクションが変更されます。 angular ng-initごとに新しいスコープを作成し、それによって '2012'年をクリックすると、それが属するセクションにのみ影響するように指示する方法はありますか?
ng-init
は新しいスコープを作成しません。現在のスコープ内の式を評価します。あなたの例では、両方のng-init
は同じスコープにあり、同じモデルプロパティを変更すると、他に影響します。別のスコープが必要な場合は、ng-controller
。
<div ng-controller="MainCtrl" ng-init="model = { year: '2013'}">
<a href="" ng-click="model.year = '2012'">2012</a> | <a href="" ng-click="model.year = '2013'">2013</a>
<div>Showing {{ model.year }}</div>
<hr />
</div>
<div ng-controller="MainCtrl" ng-init="model = { year: '2013'}">
<a href="" ng-click="model.year = '2012'">2012</a> | <a href="" ng-click="model.year = '2013'">2013</a>
<div>Showing {{ model.year }}</div>
</div>
サイドノート:この場合、ngInitは不要で、コントローラーで直接値を初期化するだけです。
NgInitの唯一の適切な使用は、ngRepeatの特別なプロパティのエイリアスです。この場合のほかに、ngInitではなくコントローラーを使用して、スコープの値を初期化する必要があります。
ng-if
は新しいスコープを作成します。次の方法で実行できます。
<div ng-if="true" ng-init="model = { year: '2013'}">
こんにちは、解決策を明確にして見つけるために、以下に示す解決策を試してください
<script>
var app = angular.module('myAngularApp', []);
app.controller('myCtrl1', function ($scope) { });
app.controller('myCtrl2', function ($scope) { });
</script>
<body ng-app="myAngularApp">
<div ng-controller="myCtrl1" ng-init="model = { year: '2012'}">
<a href="" ng-click="model.year = '2012'">2012</a> | <a href="" ng-click="model.year = '2013'">2013</a>
<div>Showing {{ model.year }}</div>
</div>
<hr />
<div ng-controller="myCtrl2" ng-init="model = { year: '2013'}">
<a href="" ng-click="model.year = '2012'">2012</a> | <a href="" ng-click="model.year = '2013'">2013</a>
<div>Showing {{ model.year }}</div>
</div>
</body>