【问题标题】:Angular : How to compile a directive from a link function?Angular:如何从链接函数编译指令?
【发布时间】:2013-12-05 02:07:57
【问题描述】:

我用这个链接函数创建了一个指令:

link : function (scope, element, attrs, controller) {
         var markdownContent = {};    
         markdownContent.result = element.text();
         markdownContent.result += '<button ng-click="console.log("test")" class="btn btn-primary btn-xs" ><i class="icon-edit"></i></button>'; 
                    }
        element.html(markdownContent.result);

问题在于 ng-click 指令不起作用。

我很确定问题是我需要编译以对 Angular 说我需要检查这个元素。但是我不懂语法和过程...

如果有人可以帮助我,那就太好了!

编辑:这是我的 PLUNKER plunker

它不起作用,因为当我点击按钮时,函数 test() 没有被调用

【问题讨论】:

    标签: angularjs angularjs-directive


    【解决方案1】:

    您可以使用$compile 服务,如this Plunk 所示。

    相关内容:

    app.directive("myDir", function($compile){
      return function (scope, element, attrs) {
        var markdownContent = {};    
        markdownContent.result = element.text();
        markdownContent.result += '<button ng-click="test()" class="btn btn-primary btn-xs" >Hello</button>'; 
        element.replaceWith($compile(markdownContent.result)(scope));
      };
    });
    

    以及对应的HTML:&lt;div my-dir&gt;&lt;/div&gt;

    这假设test 函数在范围内,如下所示:

    app.controller("ctrl", function($scope) {
      $scope.test = function() { console.log("Test!"); };
    });
    

    编辑

    正如 Dave 在 cmets 中提到的,传递给 $compile 的内容应该有一个根元素。正如 Dave 建议的那样,您可以将其包装在 &lt;div&gt; 中。 Here 是具有该编辑的 Plunk 的工作版本。

    【讨论】:

    • 在这种情况下,介意用你的指令(或上面的 fork 我的 Plunk)创建一个Plunker 并举例说明它不起作用吗?希望我能提供帮助:)
    • @FlavienBert $compile 需要单个根元素。所以将replaceWith 切换为:element.replaceWith($compile('&lt;div&gt;'+markdownContent.result+'&lt;/div&gt;')(scope));
    • 谢谢,但没有其他方法,因为如果我在 h1 标签中使用此指令,它将是这样的:

      my title

      .但出于 SEO 的原因,我不喜欢这个,因为我不确定它是否适合 google SEO。这有意义吗?
    • 正如它所写的那样,div 将包装您放置在其中的任何内容。例如,它会是

      Title

      (尽管您目前只获取 .text(),而不是 html)。也就是说,如果您知道您将只有一个根元素(并且不超过一个,就像您附加按钮时的情况一样),那么在这种情况下不需要包装 div。
    • 事实上我这样使用这个指令:

      和函数 say() 创建这个: 变量 hello 对应的内容。所以在最后我有这样的东西:

      Title

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-28
    相关资源
    最近更新 更多