在我的控制器HTML中,我将一个对象传递给一个指令:
<div cr-count-summary countdata="vm.currentCountData"></div>
vm.currentCountData
是从工厂返回的对象
我的指令代码如下:
function countSummary() {
var directive = {
scope: {
countData: '='
},
link: link,
templateUrl: function(element, attrs) {
if (attrs.countdata.type === 'Deposit') {
return 'app/count/countsummary/countDeposit.html';
} else {
return 'app/count/countsummary/countRegisterSafe.html';
}
}
}
}
我已经确认vm.currentCountData
是一个有.type
属性的有效对象。但是,它没有认识到它。我尝试通过在控制器HTML中传入countdata="Deposit"
来简化事情。我还将attrs.countdata.type
更改为attrs.countdata
,并将其评估为字符串。
当我按照上面的说明设置它时,指令templateUrl
函数似乎在控制器之前进行了评估
我看过this,但似乎只是在评估字符串
我需要做些什么才能让玩家认出对象?
答案 0 :(得分:2)
这是不可能的,因为在评估templateUrl
函数时,angular没有任何范围变量,在指令的编译函数生成preLink
&amp;之后创建范围。 postLink
。
我希望你在指令模板中使用ng-include
指令,然后在条件的基础上加载所需的模板。
<强>标记强>
<div cr-count-summary count-data="vm.currentCountData"></div>
<强>指令强>
function countSummary() {
var directive = {
scope: {
countData: '='
},
link: link,
template: "<div ng-include=\"countdata.type === 'Deposit' ? "+
"'app/count/countsummary/countDeposit.html' :" +
"'app/count/countsummary/countRegisterSafe.html'\">"+
"</div>"
}
}