【问题标题】:AngularJS : pass data from controller to controller without factory, service or broadcast?AngularJS:在没有工厂、服务或广播的情况下将数据从控制器传递到控制器?
【发布时间】:2016-08-01 12:30:11
【问题描述】:

我不想使用服务或工厂,我想传递一个数据数组。我想从我的子组件访问我的父控制器中的数据。

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

我有什么选择? 谢谢!

【问题讨论】:

  • 很抱歉,您排除了工厂和服务作为答案,尽管这些 service / factory - singleton 方法正是为此而生的。不将它们用作解决方案的不良做法。也许是有原因的?
  • 放弃工厂和服务是一个可怕的想法,你应该这样做。但如果你绝对必须这样做,你可以使用 $rootScope。 plnkr.co/edit/ZYFPsn0JMBNsiO0G4qNh
  • 这是因为我最终想将我的应用程序迁移到 Angular 2,因此只想使用控制器......或者我会因为太容易而努力吗?
  • 如果你有一个基于组件的架构,那么你的方法是正确的@William D
  • 使用 angular 之外的助焊剂存储

标签: javascript angularjs controller angularjs-scope


【解决方案1】:

如果你有嵌套组件,你可以用require访问父级的数据

var child = {
    bindings: {},
    require: {
        parent: '^^parent'
    },
    controller: childController,
    templateUrl: 'child.template.html'
};

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

this.parent.parentMethod();

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

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

您的其他选择:

绑定

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

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

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

$rootScope

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

服务

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

控制器继承

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

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

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

})

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

广播和发射事件

如果您广播的事件在整个应用程序范围内有意义(登录、注销...等),这就是要走的路。如果您要更新组件中的变量,请不要使用它。

【讨论】:

    【解决方案2】:

    我不想使用服务或工厂,我想通过 例如一个数据数组

    您可以使用 localStorage/sessionStorage 来存储和获取数据

    【讨论】:

    • 这可以用一个简短的例子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-07
    • 1970-01-01
    • 2014-11-10
    • 1970-01-01
    相关资源
    最近更新 更多