javascript - 加载 HTML 后编译 JS 指令

标签 javascript angularjs

所以我想在加载 HTML 后编译一个指令。

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

gifApp.directive('addition', function() {
  return function(scope, element) {
    element.html("<h1>" + scope.gif.name + "</h1>")

  }
});

function MainCtrl ($scope) {
  $scope.gif = {name: "Cat jumps on car"}

  $scope.push_code = function() {
    $("body").html("<div addition></div>")
  }
}

每当函数 push_code 被调用时,gif 名称就不会显示在屏幕上。窗口完成加载指令后是否无法编译代码?如果可能,我该如何解决?

最佳答案

您可以在窗口加载后添加 HTML,但 Angular 需要知道您何时这样做。现在,由于您正在使用 jQuery 添加 div,因此 Angular 不知道 DOM 已更改。因此它没有机会将您的指令应用于您的新元素。

我推荐的处理方式是使用 Angular 内置的 jQuery 版本 jQlite .

这是使用 jQlitepush_code() 版本:

push_code = function() {
   compiled = $compile('<div addition></div>')($scope);
   angular.element(document).find('body').append(compiled)
}

在这里,我们创建了一个 Angular DOM 元素,并告诉 Angular 在当前范围内 $compile 它(这将应用您的指令)。然后我们将该 Angular 元素添加到与您的 jQuery 方法等效的 jQlite 中的 body

这是一个演示:http://jsfiddle.net/Me2HW/3/

我将 push_code() 调用放在 $timeout 中只是为了证明这里没有时间依赖性。您可以随时进行此调用,包括在窗口已加载并且可以正常工作之后。

关于javascript - 加载 HTML 后编译 JS 指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20061111/

相关文章:

c# - 禁用浏览器后退按钮,但在我的 asp.net 应用程序中保持启用状态

javascript - 在 $http.get 调用中获取服务上下文

html - 从外部链接转到特定部分

angularjs - 捕获加载空白页面的所有路由 Angular NodeJs

javascript - 通过 JavaScript 在 header 或 HTML 中动态包含脚本元素

JavaScript 获取数组大小效率

javascript - 具有完整路径的 Node 异步 mkdir

javascript - 如何使用 AJAX 调用将表单值传递给 PHP 变量?

javascript - Angular JS 中的递归 promise

Docker 中的 AngularJS 和 NodeJS 应用程序