属性指令,用于从模板文件向dom添加元素

时间:2015-10-20 07:32:48

标签: angularjs

我有一个模板文件myfile.html,并且我正在以angular形式编写属性指令,该指令的目的是在声明指令属性的元素之后插入myfile.html中的元素。 。例如:将在该div之后插入myfile.html的所有内容。

我试着这样做:



app.directive('myAngularDirective', function () {
  return {
    restrict: "A",
    link: function(scope, element){
      var addMe = angular.element("myfile.html");
      element.after($copile(addMe));
      scope.$apply();
    }
  }
});  

<h1>myfile.html</h1>
<div ng-controller="myController">
  <div ng-click=clickMe()></div>
</div>
&#13;
&#13;
&#13;

&#13;
&#13;
<h1>my home page</h1>
<div my-angular-directive></div>
&#13;
&#13;
&#13;

但没有任何反应,myfile.html的内容未添加到主页。

如果我在after函数中编写简单的html,如下所示: element.after(&#34;&#34)

它确实被添加到dom但角度不消化它,并且ng-click不起作用。

感谢您的帮助。

1 个答案:

答案 0 :(得分:5)

$compile("<html here>")返回一个模板函数,该函数需要在返回DOM之前传递范围。将您的代码更改为以下内容,它应该按预期工作:

app.directive('myAngularDirective', function($compile) {
  return {
    restrict: "A",
    link: function(scope, element){
      var addMe = angular.element("<div>Hello World</div>");
      element.after($compile(addMe)(scope));
      scope.$apply();
    }
  }
});

如果要从外部URL加载模板。您需要做模板请求。

app.directive('myAngularDirective', function($compile,$templateRequest) {
  return {
    restrict: "A",
    link: function(scope, element){
      $templateRequest('index.html').then(function(tpl){
        var addMe = angular.element(tpl);
        element.after($compile(addMe)(scope));
        scope.$apply();
      });
    }
  }
});