【问题标题】:How does document.ready work with angular element directives?document.ready 如何与角度元素指令一起使用?
【发布时间】:2015-07-05 10:21:13
【问题描述】:

在我当前的项目中,我使用角度指令来创建自定义 html 元素。请参见下面的示例。

banner.js

app.directive('banner', function () {

    return {
        restrict: 'E',
        replace: true,
        templateUrl: './common/banner/banner.html'
    };
});  

横幅.html

<div>
    <div class="banner-image"></div>
</div>

问题: 有一个 javascript 文件在 document.ready 之后向带有横幅图像类的元素添加附加属性。这在使用角度元素指令之前完美运行,但不再添加属性。

问题: document.ready 回调是否在 dom 中呈现角度元素指令之前发生?如果是这样,那可以解释为什么我的 javascript 文件不再对 html 元素进行必要的更改。

谢谢

【问题讨论】:

  • 你是如何启动 Angular 应用程序的?您使用的是ng-app 指令还是手动bootstrap

标签: javascript jquery html angularjs browser


【解决方案1】:

这不是一个“指令”问题,而是一个 Angular 事件序列问题。

Angular 本身(如果不是使用 .bootstrap 手动启动)将延迟加载,直到 .onready

到那时,Angular 期望它需要运行的所有 JS 都在那里并注册。

然后 Angular 启动。 然后在 Angular 启动后,Angular 会解析 DOM 以找到要附加到的根元素(带有 ng-app 指令的那个)。

然后它递归地向下运行,注入控制器并构建指令和插值节点。

现在我们已经方式通过了任何会在 DOMReady 上触发的代码。

【讨论】:

  • 谢谢你,这解释了一切。我将创建某种解决方法以使其正常工作。
  • 不幸的是,没有合理的方法“解决”Angular 的发展方向并尝试使用旧的客户端范式。您正在查找的 HTML 将在您的指令被处理后被注入到 DOM 中,但无法知道 Angular 何时完成。此外,如果您使用一些动态插入新元素的指令,则代码将永远不会运行。您应该做的是在添加元素的指令中运行脚本。但仅在那个元素上而不是在整个文档上寻找那些元素。 DOM 操作它指令的用途。
  • 是的;如果您希望 Angular 继续发挥它的魔力,请不要试图与之抗争。重写你的脚本正在做的任何事情。要么将它移动到服务器,在模板中(我认为结局不好),要么围绕你想要做的事情编写一个指令,并遵循 Angular $digest 循环。您的代码不必以 Angular 的方式编写,但如果您希望它使用自定义指令和导入/包含等等,它绝对应该移植到 Angular 的墙内。
猜你喜欢
  • 1970-01-01
  • 2014-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 2016-09-09
相关资源
最近更新 更多