javascript - 无法获取 AngularJS Controller 对象

标签 javascript jquery angularjs angularjs-controller

在我的非 Angular 代码中,我通过以下代码获取 Controller 对象

var controllerElement = angular.element('[ng-controller="' + controllerName + '"]');
var controller = controllerElement.controller();

直到前天, Controller 对象有一些 $get.h 而不是 Controller 对象时,它一直运行良好{}

以下代码返回正确的 Controller 对象,但在某些情况下 Angular 会抛出异常:

var $controller = injector.get("$controller");
var controller = $controller(controllerName, { $scope: scope });

你能帮我找出以前的方法有什么问题吗,即 controllerElement.controller();

编辑: 发现后一种方法的另一个问题是它实例化了一个新的 Controller 对象,而不是返回与元素关联的原始 Controller 对象。

最佳答案

我强烈建议不要将 Angular 代码与外部 JS 混合使用。每次你调用Controller ,它确实会创建一个新对象,但据我从你的问题中了解到,你可能想对它或它的数据进行一些操作。对于跨 Controller 或应用程序状态的持久数据,您应该使用 ServiceFactory ,并且操纵它应该发生在其中,或者来自 Controller不是某个地方的一些随机 JS。

关于javascript - 无法获取 AngularJS Controller 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30341304/

相关文章:

angularjs - 如何在 Node 服务器上运行 angularjs 应用程序?

javascript - 如何使用 ng-repeat 将 API 调用返回到 View 的对象数量设为 'print'?

javascript - Jquery通过递归改变颜色

javascript - 为什么 Chrome 和 Firefox 以不同方式处理 jQuery ajax() 回调中设置的 javascript 变量?

javascript - 有 100 行的表;需要根据行中单击的链接显示一个 div

javascript - js函数onclick需要点击一次改变字体

javascript - 从本地文件获取 JSON 的 Angular 服务不起作用

javascript - GetElementByID 问题不工作

javascript - 如何使用 Cypress 和 @testing-library/cypress 测试复选框切换,

javascript - 取标签内容