angularjs - 将元素从模板文件添加到 dom 的属性指令

标签 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>

<h1>my home page</h1>
<div my-angular-directive></div>

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

如果我像这样在 after 函数中编写纯 html: 元素.after("")

它确实被添加到 dom 但 angular 不消化它,并且 ng-click 不工作。

感谢您的帮助。

最佳答案

$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();
      });
    }
  }
});  

关于angularjs - 将元素从模板文件添加到 dom 的属性指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33230599/

相关文章:

AngularJS - 在页面加载时将数据引导到服务中

javascript - 需要将带有变量的 $scope 以 Angular 方式传递到另一个页面?

javascript - Angular js/ionic 应用程序 url 链接和功能链接不起作用

javascript - AngularJS + TypeScript + ES6 模块 : how to bundle for browser?

javascript - 将依赖项指定为字符串是否会使 AngularJS 中的 DI 更快?

javascript - 从 ng-click 属性中选择另一个 HTML 元素

javascript - 在AngularJS中,为什么$emit事件可以被取消,而$broadcast事件却不能?

http - 我需要 AngularJS $http 服务的两个实例还是什么?

javascript - Firebase 检索存储在本地存储中的用户数据作为 firebase :authUser:

angularjs - angularjs 中 angular.bind 的用途是什么?在哪里使用它?