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>