【问题标题】:angular js , ng-model not ready for third party directiveangular js , ng-model 没有为第三方指令做好准备
【发布时间】:2016-10-16 18:50:29
【问题描述】:

我正在使用https://github.com/ezraroi/ngJsTree,但遇到了以下问题。

我的 ng-model 是一个 AJAX 请求,当我的控制器触发时,数据还没有准备好,所以它不会渲染任何东西。

<div ng-controller='myCtrl'>
    <div js-tree="treeConfig" ng-model="treeData" should-apply="ignoreModelChanges()" tree="treeInstance" tree-events="ready:readyCB;create_node:createNodeCB"></div>
</div>

https://plnkr.co/edit/IRaqvd0DPcqkxgo0xoqa?p=preview

【问题讨论】:

  • 如果您使用$http 进行服务器调用,则该指令应在响应返回时正确更新。也许您的问题在于您的服务调用发生的方式。显示该代码将有助于集中问题以找到解决方案。
  • 另外,ignoreModelChanges()$http 请求配对似乎很奇怪,模型肯定会改变;你有没有试过看看它在移除后是否有效?
  • 您的问题似乎是由于您的脚本没有正确加载。查看控制台错误:“拒绝从 'raw.githubusercontent.com/vakata/jstree/master/dist/jstree.js' 执行脚本,因为它的 MIME 类型 ('text/plain') 不可执行,并且启用了严格的 MIME 类型检查。” GitHub 不支持直接链接raw 脚本。

标签: javascript angularjs angularjs-directive jstree


【解决方案1】:

根据您的应用程序的结构,您可能有一些替代方案来处理这种情况。创建一个负责读取数据的服务。然后您可以执行以下操作之一:

  1. 让路由器等到读取解决之前 导航到视图。这是一个相关的 SO 问题:AngularJS $http.get with resolve

  2. 将事件监听器添加到控制器和 使服务在数据准备好时发出/广播事件。

在这两种情况下,您可能都希望从服务中读取数据。

【讨论】:

  • 第 1 条和第 2 条的任何例子?
  • 添加了关于解决 routeProvider 中数据的 SO 问题的链接。至于第二个例子 - 我会去找角度文档,但也有相关的 SO 问题。 (stackoverflow.com/questions/14502006/…)
猜你喜欢
  • 2015-08-01
  • 2017-06-12
  • 2016-04-04
  • 1970-01-01
  • 1970-01-01
  • 2016-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多