以下是相关的html:
<ng-include src="'app/views/order.html'"></ng-include>
附加到范围,此ng-include
嵌套在一个贸易变量中。交易变量如下:
var trade = {
order: {}
}
问题是order.html期望订单变量不是trade.order
如何拨打ng-include
并将trade.order
作为order
传递?
答案 0 :(得分:2)
ng-include读取全局范围内的变量。你不能使用它。它不起作用。
不要使用onload
,因为它会占用全球范围。
更清洁的解决方案是制作a new generic directive
这是理想的用法:
<div ng-include-template="'app/views/order.html'" ng-include-variables="{ order: trade.order }"></div>
指令是:
.directive(
'ngIncludeTemplate'
() ->
{
templateUrl: (elem, attrs) -> attrs.ngIncludeTemplate
restrict: 'A'
scope: {
'ngIncludeVariables': '&'
}
link: (scope, elem, attrs) ->
vars = scope.ngIncludeVariables()
for key, value of vars
scope[key] = value
}
)
您可以看到该指令不使用全局范围。相反,它从ng-include-variables读取对象,并将这些成员添加到其自己的本地范围。
我希望这会有所帮助。它干净而且通用。
答案 1 :(得分:0)
答案 2 :(得分:0)
解决方案是创建一个新指令:
angular.module('MyApp').directive('includeTemplate', directive);
function directive() {
return {
templateUrl: function(elem, attrs) {
return attrs.includeTemplate;
},
restrict: 'A',
scope: {
'includeVariables': '&'
},
link: function(scope, elem, attrs) {
var vars = scope.includeVariables();
Object.keys(vars).forEach(function(key) {
scope[key] = vars[key];
});
}
};
}
以下是用法:
<div include-template="'myTemplate.html'" include-variables="{ var: 'myVar' }"></div>