javascript - AngularJS : pass data from controller to controller without factory, 服务或广播?

标签 javascript angularjs controller angularjs-scope

我不想使用服务或工厂,而是想传递例如一组数据。我想从子组件访问父 Controller 中的数据。

工厂和服务被排除在外,因为我最终想将我的应用程序迁移到 Angular 2,并且我不想使用 ngclick,它似乎与广播/向上/打开密不可分。 如果有人知道如何使用广播在后台传递数据(无需用户交互,如输入或 ngclick),它也可以工作:)

我有哪些选择? 谢谢!

最佳答案

如果你有嵌套组件,你可以使用require

访问父组件的数据
var child = {
    bindings: {},
    require: {
        parent: '^^parent'
    },
    controller: childController,
    templateUrl: 'child.template.html'
};

现在在您的子 Controller 中,您可以访问父 Controller 的一个实例,因此可以调用方法并访问它的属性:

this.parent.parentMethod();

您在此处的先前答案中有一些更详细的代码:

Where should I place code to be used across components/controllers for an AngularJS app?

您的其他选择:

绑定(bind)

就像指令的 scopebindToController 一样,您可以使用组件的 bindings 属性通过 html 属性绑定(bind)数据和方法

<component-x shared="$ctrl.shared"></component-x>

var componentX = {
    bindings: { shared: '=' }
    ...

$根作用域

切勿使用它来存储数据。它可以工作,但不是为此目的而设计的,并且会导致无法维护的代码。

服务

共享数据应该通过服务完成是一种常见的误解。 不过,在 1.5 之前,这是真实且良好的做法。

Controller 继承

另一个不好的做法(imo)。 在经典 MVC 应用程序中,嵌套 Controller 可以使用$controller 服务继承父级:

.controller('MainController', function ($scope) {

    $scope.logMessage = function(message) {
        console.log("Message: " + message);
    }

})

.controller('ServicesController', function($scope, $controller) {
    $controller('MainController', {$scope: $scope});
});

广播和发出事件

如果您广播的事件在应用程序范围内(登录、注销等)有意义,那么这是可行的方法。如果您正在更新组件中的变量,请不要使用它。

关于javascript - AngularJS : pass data from controller to controller without factory, 服务或广播?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38698953/

相关文章:

javascript - 使用元素选择器向对象添加功能

javascript - 将按钮 onclick 事件绑定(bind)到 Backbone View

javascript - 如何在指令之外调用方法?

linux - 仅在 linux 主机中工作默认 Controller

javascript - 自定义复选框在剑道网格中不可单击

javascript - 如何防止 flex 容器溢出/下溢?

javascript - 如何检查 ng-repeat 生成的第一个 radio 输入?

javascript - AngularJS ng-show 不适用于新的 DOM 元素

java - 避免 Spring Controller 匹配静态内容

java - 加载 url 而不更改 url