如何将AngularJS指令应用于ajax内容?

问题描述 投票:5回答:2

我知道我可以apply到template / templateURL,但是当前内容将从我的应用程序中的另一个位置加载。

JSbin:http://jsbin.com/imuseb/1/

HTML

<html ng-app="app">
  <head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular.min.js"></script>

  </head>
  <body>

    <div alert>here</div>

  </body>
</html>

JS代码:

var app = angular.module('app', []);

app.directive('alert', function (){
  return {
    link: function (scope, element, attrs) {
      element.on("click", function (){
        alert("here");
      });
    }
  };
});


$(function (){
   $("body").append("<div alert>here too</div>");
});
javascript html angularjs angularjs-directive
2个回答
3
投票

新DOM必须可被角度应用访问,以便正确编译。这是执行此操作的一种方法(不是唯一的方法)。要将新的DOM应用于应用程序的$rootScope,请更改以下内容:

$(function (){
    $("body").append("<div alert>here too</div>");
});

至:

app.run(function($rootScope){
    $rootScope.$apply($("body").append("<div editable>here too</div>"));
});

根据Angular docs

$ apply()用于从角度框架外部以角度执行表达式。 (例如,来自浏览器DOM事件,setTimeout,XHR或第三方库)。


0
投票

最好是从有角度的框架中加载额外的内容。签出ng-include

如果无法满足您的需要,则必须手动调用元素上的angular编译服务,对其进行编译,然后使用ng-include自行将其链接到范围上。

编译元素接触DOM,因此,如果可能,应在自定义指令中完成。

© www.soinside.com 2019 - 2024. All rights reserved.