如何使用指令属性值创建动态模板

时间:2016-04-26 14:06:13

标签: javascript angularjs angularjs-directive

我创建了一个指令,并希望使用带有属性wm.data.typeName的动态模板。

wm.data.typeName = "<span>html code</span>"

<fill-choose model-input="wm.data.modelInput" text="wm.data.typeName"></fill-choose>

指令fillChoose

(function() {
  'use strict';

  angular
    .module('learn')
    .directive('fillChoose', fillChoose);

  /** @ngInject */
  function fillChoose($showdown) {
    var directive = {
      restrict: 'AE',
      template: function(elem, attr) {
        //return $showdown.makeHtml(fill.modelInput);
        return '<div>'+ attr.modelInput +'</div>';
      },
      scope: {
        modelInput: '=',
        text: '='
      },
      controller: FillChooseController,
      controllerAs: 'fill',
      bindToController: true
    };

    return directive;

    /** @ngInject */
    function FillChooseController($scope) {
      var vm = this;
    }
  }

})();

但通过这种方式,模板将为<div>wm.data.modelInput</div>

如何将模板设为<div><span>html code</span></div>

2 个答案:

答案 0 :(得分:0)

 link: function(scope, elem, attr) {
    //return $showdown.makeHtml(fill.modelInput);
    elem.html($compile('<div>{{fill.modelInput}}</div>')(scope));
  }

现在这个案例很简单

template:'<div>{{fill.modelInput}}</div>';

会工作,但我给了$ compile的东西,因为你可能只给出了你真正想做的简化版本。

答案 1 :(得分:0)

你必须打印它

<fill-choose model-input="{{ wm.data.modelInput }}" text="wm.data.typeName"></fill-choose>

但这将一次,因为当初始化指令时,模板函数将调用一次当angular calles编译为编译模板时)那就是你需要通过指令的范围

传递它的原因