angularjs 1.5覆盖templateUrl

时间:2017-01-04 14:45:35

标签: angularjs angularjs-directive code-reuse

对于如下指令,有没有办法覆盖' templateUrl'属性,以便可以使用myTemplate1.tpl.html而不是myTemplate2.tpl.html?这是因为该指令已经在其他地方使用,但是对于新要求,不能使用当前模板。

angular.module("myDirective", [])
    .directive("myDirective", [function () {
    "use strict";

    return {
        restrict: "E",
        replace: true,
        scope: {
            "property1": "=",
            "property2": "="
        },
        templateUrl: "web-url/myTemplate1.tpl.html"
    };
}]);

2 个答案:

答案 0 :(得分:1)

如果你可以自己编辑指令代码,你可以这样做:

angular.module("myDirective", [])
    .directive("myDirective", [function () {
    "use strict";

    return {
        restrict: "E",
        replace: true,
        scope: {
            "property1": "=",
            "property2": "="
        },
        templateUrl: function(element, attrs) {
            // default to 'old' template
            // only use other template if passed through the 'template-url' attribute
            return attrs.templateUrl || "web-url/myTemplate1.tpl.html";
        }
    };
}]);

这样你所有旧的指令用法仍然有用,你可以这样配置:

<!-- Still uses web-url/myTemplate1.tpl.html -->
<my-directive></my-directive>

<!-- Uses some/other/template/url.html -->
<my-directive template-url="some/other/template/url.html"></my-directive>

答案 1 :(得分:0)

可能尝试如下:

angular.module("myDirective", [])
    .directive("myDirective", [function () {
    "use strict";

    return {
        restrict: "E",
        replace: true,
        scope: {
            "property1": "=",
            "property2": "="
        },
        templateUrl:  function(elem, attr) {
            return 'web-url/myTemplate'+ attr.urlnum+'.tpl.html';
         }
    };
}]);