AngularJS - 将对象传递到属性时动态加载 templateURL
AngularJS - dynamically load templateURL when passing object into attribute
在我的控制器中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,但它似乎只评估字符串
我需要做什么才能让 attrs 识别对象?
这是不可能的,因为在评估 templateUrl
函数时 angular 没有任何作用域变量,作用域是在指令的编译函数生成后创建的 preLink
& 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>"
}
}
在我的控制器中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,但它似乎只评估字符串
我需要做什么才能让 attrs 识别对象?
这是不可能的,因为在评估 templateUrl
函数时 angular 没有任何作用域变量,作用域是在指令的编译函数生成后创建的 preLink
& 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>"
}
}