onload
每次加载新的部分时,传递给的表达式都会进行评估。在这种情况下,您将更改var
两次的值,因此在加载两个部分时,当前值将是B
您想将不同的数据传递给每个部分/模板(底层 html 文件相同)。为了实现这一点,正如 Tiago 所提到的,您可以使用不同的控制器来实现。例如,考虑以下
<body ng-controller='MainCtrl'>
<div ng-include src='"toBeIncluded.html"' ng-controller='ctrlA' onload="hi()"></div>
<div ng-include src='"toBeIncluded.html"' ng-controller='ctrlB' onload="hi()"></div>
</body>
在这里,我们有两个部分,每个部分都有自己的范围,由它们自己的控制器(ctrlA
和ctrlB
)管理,两个子范围都是MainCtrl
. 该函数hi()
属于 的范围,MainCtrl
将运行两次。
如果我们有以下控制器
app.controller('MainCtrl', function($scope) {
$scope.msg = "Hello from main controller";
$scope.hi= function(){console.log('hi');};
});
app.controller('ctrlA', function($scope) {
$scope.v = "Hello from controller A";
});
app.controller('ctrlB', function($scope) {
$scope.v = "Hello from controller B";
});
的内容toBeIncluded.html
是
<p>value of msg = {{msg}}</p>
<p>value of v = {{v}} </p>
生成的 html 将类似于以下内容
<p>value of msg = Hello from main controller</p>
<p>value of v = Hello from main controller A </p>
和
<p>value of msg = Hello from main controller</p>
<p>value of v = Hello from controller B </p>
此处示例:http ://plnkr.co/edit/xeloFM?p=preview