AngularJS - 在将对象传递给属性时动态加载templateURL

时间:2015-08-13 18:31:39

标签: javascript angularjs angularjs-directive angularjs-controller angular-template

在我的控制器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,但似乎只是在评估字符串

我需要做些什么才能让玩家认出对象?

1 个答案:

答案 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>"
    }
}