【问题标题】:Angular Directives 2 way binding & refreshAngular Directives 2 方式绑定和刷新
【发布时间】:2015-01-14 19:19:06
【问题描述】:

假设您有一个页面,其中有一个客户搜索指令(第一个指令)。 您进行搜索,然后从 Web 服务器返回客户列表。

现在,在上面的指令中,您有第二个指令,我们称之为customerRes,它为客户显示一些信息(这就像在您网站的许多地方重复使用的小部件)。在第二条指令的隔离范围内,我有一个名为 results 的属性,我从返回的结果中绑定了它,例如

第一个指令有一个类似的声明

<customer-res results="webserverResult">

customerRes 指令中我有类似

的东西
<div ng-repeat="x in results>
{{name}} {{bla}}  ... bla bla
</div>

现在每次用户单击父指令时,它都会向网络服务器发出请求,并且可能会得到不同的结果。

问题:Angular 是否真的监控自己绑定到隔离范围的值在指令之外发生了变化,还是我需要做一些事情来确保它失效?

此外,即使您在结果返回之前加载页面,一旦结果返回,他们不应该更新页面元素吗?

【问题讨论】:

  • 我建议发布您的指令代码。

标签: javascript angularjs binding isolate-scope


【解决方案1】:

一个很酷的方法是您自己会发现。不要误会我的意思,但就我个人而言,我在迈出有角的第一步时就这样做了。有助于更深入地理解框架,而不是阅读文档并更容易忘记。

您可以随时添加

scope.$watch('myVariable', function(value) { 
  console.log('myVariable changed to:', value);
})

到你的指令,看看它的值什么时候改变。

Two-way-bindig 就像一个魅力,即使在整页重新加载。没有你的指令的 JS 代码就不能更精确了。但是当使用隔离作用域时,可能需要指令

scope: {
   myVariable: '='
}
<my-directive my-variable="results.entries"></my-directive>

但请记住,重新加载页面时,角度会从零开始。对于每个指令来说,它的链接函数都被调用一次,并且在后台调用了许多其他的东西。关键字是angular的digest cycle

希望我能提供这个(更广泛的)答案。

【讨论】:

  • 因此,即使我将(通过 http 服务)检索指令上方一级的实际结果数组,2 路绑定仍然可以工作,无需使用 $apply 或类似的东西,正确?我现在不是@工作,问题是我遇到问题的块有很多自定义依赖项。我将不得不写一些新的东西(明天可能会做并更新帖子)。哦,顺便感谢您的支持。
  • 只要变量保持相同的引用,大致上你是正确的。 Angular 有很多地方可以自动应用范围(摘要循环的触发器)。例如ng-clickng-model 等请参阅这篇文章:angular-tips.com/blog/2013/08/watch-how-the-apply-runs-a-digest。如果您一有代表就投票给我的答案,我会很高兴。
  • 事实证明我的判断是正确的,但是如果您将某些内容绑定到“结果”而您键入“结果”,这不是框架的错。谢谢大家的帮助,非常感谢,也感谢你的链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-17
  • 1970-01-01
  • 1970-01-01
  • 2019-04-08
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
相关资源
最近更新 更多