gpt4 book ai didi

angularjs - 如何将数据从指令输出到 Controller ,我应该这样做吗?

转载 作者:行者123 更新时间:2023-12-02 03:40:55 24 4
gpt4 key购买 nike

用例

为了在表单中使用,我创建了一个指令来跟踪数组中的变化。它允许恢复更改并单独存储删除和添加。它允许数组(数据库中的一对多映射)进行增量更新(而不是要求服务器进行比较或重写整个列表)。


问题?

我的问题是关于将功能公开给 Controller 范围的方式。我目前在指令范围内使用双向数据绑定(bind)属性。这行得通,而且看起来很可靠(当然,您可以通过重新分配范围的值轻松地破坏它,但有意地您可以破坏任何东西)。


代码

可以看到这个 plunk 以查看实际效果。它允许从 View 和 View 的 Controller 调用指令 Controller 上的方法。 (我有意使用指令 Controller ,因为这就是我在指令到指令通信的实际代码中所做的,但这也可以只放在链接函数中。)


问题

这种设计方式不好吗?我现在是否完全将 AngularJS 扔出窗外并修改了我自己的代码。是否有任何更好的方法来从指令中公开函数(请记住,在一个表单中会有多个这样的函数)。

很容易传入 my-attribute="someFunction()" 让指令成为 View Controller 的消费者。我找不到更好的方法来做相反的事情,让 View Controller 从指令中消费。


备选方案?

我一直在考虑在这里使用一个服务,其中该服务将提供一个在 View 中实例化的对象,传递给指令,并让指令将它的结果模糊到该对象。然后依次让 View Controller 使用来自该服务对象的信息。这是更好的方法吗?

最佳答案

您的方法没有任何问题。事实上,内置的 Angular 指令(如 ng-form)使用这种方法将 Controller 存储在范围内(请参阅 ng-form 的名称属性)http://docs.angularjs.org/api/ng.directive:ngForm

为了提高可重用性,尽管我会将 api 方法放在 Controller 上,然后将 Controller 本身放在 api 中:

this.getChanges = function () {};
this.resetChanges = function(){};

$scope.api = this;

在指令中, Controller 的主要目的是作为其他指令的 api(如果您不需要其他指令的 api,您可以在链接函数中完成所有操作)。这样做可以确保 api 在范围内以及任何“需要”oneToMany 指令的指令都可用。

关于angularjs - 如何将数据从指令输出到 Controller ,我应该这样做吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20109001/

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