javascript - 如何通过绑定(bind)将模板传递给 AngularJS 组件

标签 javascript angularjs angularjs-components angularjs-1.5 angularjs-1.6

我想通过绑定(bind)将自定义模板传递到 AngularJS 组件中,并使用其作用域进行渲染。像这样的东西(伪代码,这不起作用):

angular
  .module('myApp', [])
  .controller('mainController', ($scope) => {

    $scope.getTemplate = () => (`
      <div>
        <span>{{$ctrl.name}}</span>
      </div>
    `)
  })
  .component('myComponent', {
    controller: ($scope, $compile) => {
      const $ctrl = $scope.$ctrl;

      $ctrl.$onInit = () => {
        $ctrl.name = 'Hello World!';
      };

      $ctrl.compileTemplate = () => $compile($ctrl.template())($scope);
    },
    bindings: {
      template: '&'
    },
    template: `
      <div>
        My dynamic content: {{$ctrl.compileTemplate()}}
      </div>
  `
  });

用法:

<div ng-controller="mainController as $ctrl">
  <my-component template="$ctrl.getTemplate()"></my-component>
</div>

预期结果:

<div>
  My custom content:
  <div>
    <span>Hello World!</span>
  </div>
</div>

有什么办法吗?

最佳答案

如果您想要动态模板,您可以利用可以将函数传递给组件 template 的事实,在函数可注入(inject)的组件中,我建议您引用 this问题以获取更多信息,但主要思想如下:

angular
  .module('myApp', [])
  .factory('tempalteFactory', {
      return getTemplate() {
          retrun '<b> yep </b>';
      }
  })
  .component('myComponent', {
    controller: ($scope, $compile) => {
      const $ctrl = $scope.$ctrl;

      $ctrl.$onInit = () => {
        $ctrl.name = 'Hello World!';
      };   

    },
    template: function($element, $attrs, templateFactory) {
          'ngInject';

          return templateFactory();
    }    
  });

关于javascript - 如何通过绑定(bind)将模板传递给 AngularJS 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46349067/

相关文章:

javascript - 在 Firefox OS 中使用 Javascript 生成文件

javascript - 运行两台服务器时 NodeJS 服务器错误

angularjs - 在对子范围进行初始化之前等待 Angular 组件绑定(bind)稳定的正确方法?

angularjs - 跨嵌套组件绑定(bind)输出不起作用

javascript - 网页内 iframe 内的 HTML 内的样式元素

javascript - 更改 html 标记或其子级(而不是其属性)文本中的日期格式

javascript - Promise 如何与嵌套函数调用一起工作

javascript - 带有自定义选项模板的 Angular 选择

javascript - Angular 指令被识别为 html 表单元素

javascript - AngularJS 多槽嵌入