问题标签 [angularjs-events]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
163 浏览

angularjs - 在 AngularJS 中,当我在控制器初始化期间向所有控制器广播时,是否必须 setTimeout 才能广播?

换句话说,我是否必须等待下一个事件周期才能使用 广播$rootScope.broadcast(),以便其他控制器使用$rootScope.on()可以接收广播的事件?

这不是通常的应用程序流程,但是假设我们在应用程序中有一个演示模式会短路一些逻辑,并且不需要去服务器获取一些东西,但可以使用提供演示数据broadcast(),是真的吗我们必须使用

以便其他控制器将其接起?

原因是,其他控制器可能还不存在。如果 app 模块定义了 5 个控制器,或者使用依赖注入来声明它依赖于 2 组控制器,abc.xyz.controllers并且abc.efg.controllers.

由于控制器定义是

所以通过提供该函数,您不知道何时调用该函数(创建控制器),但假设所有创建都在第一个事件周期中完成,那么如果您等待一个周期广播,那么您可以确定所有控制器都会接收广播吗?这也正式记录了吗?

0 投票
1 回答
1402 浏览

angularjs - 带有 TypeScript 的 AngularJS 1:在控制器中放置 $rootScope.on 的位置?

服务

控制器

但这没有意义,因为constructor仅调用一次(每次启动)...:\

0 投票
2 回答
1146 浏览

javascript - 指令之间通信的最佳方式

从这里复制。可能是,我可以在这里得到更正确的答案!

指令之间似乎有相当多的通信方式。假设您有嵌套指令,其中内部指令必须与外部通信(例如,它是由用户选择的)。

到目前为止,我有 5 种方法可以做到这一点

要求:父指令

内部指令可以要求外部指令,它可以在其控制器上公开一些方法。所以在内部定义中

在外部指令的控制器中:

$发射事件

内部指令可以 $emit 一个事件,外部指令可以通过 $on 响应该事件。所以在内部指令的控制器中:

在外部指令控制器中:

在父范围内执行表达式,通过 &

该项目可以绑定到父范围内的表达式,并在适当的点执行它。HTML 将类似于:

所以内部控制器有一个可以调用的“innerChoose”函数

这将在外部指令的范围内调用(在这种情况下)“functionOnOuter”函数:

非隔离范围的范围继承

鉴于这些是嵌套控制器,范围继承可以起作​​用,并且内部指令可以调用范围链中的任何函数,只要它没有隔离范围)。所以在内部指令中:

在外部指令中:

通过服务注入内部和外部

可以将服务注入到这两个指令中,因此它们可以直接访问同一个对象,或者调用函数来通知服务,甚至可以在发布/订阅系统中注册自己以接收通知。这不需要嵌套指令。

问题:与其他人相比,每个人都有哪些潜在的缺点和优点?

0 投票
2 回答
671 浏览

angularjs - 刷新页面时不会触发 Angular 中的 stateChangeStart 事件

我有一个自定义指令:

这样做的目的是,当一个状态拥有它时,它将隐藏页面上将该指令设置为该值的所有元素。

这一切都非常有效,除非我没有自然地转换到该页面但我被转发到那里(服务器重定向)或者我使用 Ctrl+F5 刷新页面。然后“stateChangeStart”事件不会受到打击。

该指令是这样注册的:

在这些情况下,我如何获得状态?

我发现这个非常相似的问题没有解决方案 $stateChangeStart don't work when user refresh browser

0 投票
0 回答
132 浏览

javascript - 将事件从 d3.js 传播到 angular 而不诉诸 scope.apply

我在 Angular 1.x 控制器中使用 d3.js 库。我的 d3.js 库在 div 上创建了一个单击事件,当单击 div 时,它会更新角度控制器范围内的某些内容。

问题是,当我更改范围($scope.test = "a test")时,修改没有报告到模板中。

但是,如果在该 d3.js 点击事件中,我执行 $scope.$apply (如相关主题所建议:Angular + D3 - Get scope values to show in template from click event),则更新 dom 并且一切工作正常。

由于不鼓励使用范围,是否有另一种解决方案可以使更改出现在我的模板中?

这是我的代码:

0 投票
1 回答
252 浏览

angularjs - 使用广播 angularjs 进行指令通信的指令

我有两个指令,需要在发布请求后将值从一个指令传递到另一个指令。

第一个指令看起来像

第二个指令看起来像

不监听第二个指令事件

0 投票
0 回答
1800 浏览

angularjs - 使用 $broadcast 在控制器之间共享数据

为了在控制器之间共享数据,通常使用服务。

我发现$rootScope.$broadcast如果我要分享的数据是 a[]{}.

对我来说,使用广播的好处是您不必使用 watcher 来检查数据是否已加载到服务中。编写的代码也更少。

所以我的问题是:

  • 是否可以使用 $broadcast
  • 使用 $broadcast 是否有一些不便

这是一些使用两种“技术”的示例来说明我的意思。

使用示例 $rootScope.$broadcast

使用服务的示例

0 投票
1 回答
94 浏览

angularjs - 为什么服务不接收事件

我有一些在控制器中工作的代码。我重构了该功能并将其移至服务中。该代码有一个事件监听器:

这在控制器中时被捕获,但在服务中时未捕获事件。我曾尝试使用$rootScope.$broadcast()and$rootScope.$emit()来发出事件信号,但都没有被服务捕获。

服务代码没有什么特别之处:

问题:如何获得服务以捕获根范围内的事件?

编辑更多信息:该事件是从另一个服务发出的信号。这个事件在其他控制器中被捕获,但在另一个服务中没有被捕获。我已经尝试了服务/工厂、发射/广播等的所有变体,但它们都不起作用。该服务只是没有捕捉到事件,但在所有其他方面都完美无缺。

0 投票
1 回答
320 浏览

javascript - 停止“$destroy”上的事件侦听器。TypeError: $on 不是函数;

我试图在范围被破坏时停止所有事件侦听器。

我收到此错误:

vm.on(..) 都不起作用

0 投票
2 回答
24 浏览

javascript - 如何在 angularjs 的两个独立控制器中运行函数

我有两个单独的 angularjs 控制器,分别命名为HomeControllerSearchController.

我有一个名为Search()in的函数HomeController

如何从 运行搜索功能searchController