gpt4 book ai didi

javascript - AngularJS 指令 - 在范围参数更改时重新运行链接功能

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:45:34 28 4
gpt4 key购买 nike

我有一个构建一组嵌套 <ul> 的指令代表文件夹结构的元素。我使用链接函数创建新的 DOM 元素并将它们附加到指令实例元素:

function link(scope, iElement, iAttr) {
var rootElement = buildChildElement(scope.tree);
iElement.append(rootElement);
}

<ul> 中的元素树与 jQueryUI 的拖放交互连接,该交互调用包含指令的 Controller 上的函数,以根据拖放事件更新范围参数。

我想要 <ul>范围参数发生更改时自动更新树。我在我的链接功能中尝试了一个监视功能:

scope.$watch('tree', function(newTree, oldTree) {
var newRoot = buildChildElement(newTree);
iElement.contents().remove();
iElement.append(newRoot);
}

这在一定程度上起作用,但是对 remove() 的调用触发 $watch()第二次方法最终恢复我的 Controller 更改。如果我注释掉 remove() , 我可以看到一个新的 <ul>编写的树正确反射(reflect)了 Controller 中对参数所做的更改。

双发 $watch()让我觉得我做错了。没有它,我的参数会正确更新,但我的 <ul>不更新(被丢弃的元素停留在它被丢弃的地方)。

确保您的指令在范围参数之一发生变化时刷新的正确方法是什么?

我应该使用 compile 吗?功能和构建 <ul>基于属性数组而不是使用 link 的树功能?

最佳答案

您的方法非常 jQuery 风格。我想你会发现在这种情况下你是在反对 Angular。 sh0ber 的问题是正确的;你应该发布一个演示或其他东西,或者至少一些示例代码,这样你就可以得到一个有效的答案。

我想你想做一个递归树指令。 Check out this SO answer对于一些有趣的方法。主要思想是 watch 是不必要的。只需更改对象,Angular 就会处理剩下的事情。最有效的方法是直接更改特定的节点对象而不是替换整个对象,但这也行得通。

关于javascript - AngularJS 指令 - 在范围参数更改时重新运行链接功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16858533/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com