可以通过angularjs指令中的属性更改templateURL吗?

时间:2016-09-06 20:11:24

标签: angularjs angularjs-directive attributes

我有以下指令:

buttons[i] = ((Buttons) findViewById(resID));

由于我需要根据页面使用它更改标题,我想如果我可以在DOM中做这样的事情:

的index.html

(function() {

  'use strict';
  function header() {
    return {
      templateUrl: '/app/home/homeheader.html'
    };
  }
   angular.module('app').directive('appheader', header);
})();

signUp.html

 <appheader page="index"></appheader>

...

然后在指令中,分配我想要的模板。

我在网上看了一些,但我找不到任何解决方案。有这样的

2 个答案:

答案 0 :(得分:1)

你可以将一个函数传递给templateUrl,检查page属性,让你的想象力变得疯狂!

查看Creating Custom Directives文档。

这是一个让你入门的例子:

(function() {

  'use strict';

  function header() {
    return {
      templateUrl: function(elem, attrs) {

        // check the attribute value
        if (attrs.page === "home") {
          return '/app/home/homeheader.html';
        } else {
          return '/app/home/signupheader.html';
        }

        // OR use the attribute value as part of the template
        return '/app/home/' + attrs.page + 'header.html';

      }
    };
  }

  angular.module('app').directive('appheader', header);

})();

答案 1 :(得分:0)

templateUrl可以是一个函数。

the docs中给出的示例是这样的:

angular.module('docsTemplateUrlDirective', []) .controller('Controller', ['$scope', function($scope) { $scope.customer = { name: 'Naomi', address: '1600 Amphitheatre' }; }]) .directive('myCustomer', function() { return { templateUrl: function(elem, attr) { return 'customer-' + attr.type + '.html'; } }; });