AngularJS:将数据从控制器传递到控制器,无需工厂、服务或广播
AngularJS : pass data from controller to controller without factory, service or broadcast?
我不想使用服务或工厂,我想传递例如一个数据数组。我想从子组件访问父控制器中的数据。
工厂和服务被排除在外,因为我最终想将我的应用程序迁移到angular 2,而且我不想使用ngclick,它似乎无法与广播/up/on一起使用。如果有人知道如何使用广播在后台传递数据(无需用户交互,如输入或ngclick),它也会起作用:)
我有什么选择?非常感谢。
如果您有嵌套组件,您可以使用require
访问父级的数据
var child = {
bindings: {},
require: {
parent: '^^parent'
},
controller: childController,
templateUrl: 'child.template.html'
};
现在,在您的子控制器中,您可以访问父控制器的实例,因此可以调用方法并访问其属性:
this.parent.parentMethod();
您在前面的回答中有一些更详细的代码:
我应该将AngularJS应用程序的组件/控制器之间使用的代码放在哪里?
您的其他选择:
绑定
就像指令的scope
或bindToController
一样,您可以使用组件的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});
});
广播和发射事件
如果您正在广播的事件在整个应用程序范围内有意义(登录、注销等),请使用此方法。如果您正在更新组件中的变量,请不要使用它。
我不想使用服务或工厂,我想冒充示例数据阵列
您可以使用localStorage/sessionStorage来存储和获取数据
相关文章:
- Ionic将firebase注入工厂,同时将控制器和服务保存在不同的文件中
- 使用2个控制器管理工厂JSON$http数据
- Http服务工厂将未定义的返回到Angular中的控制器
- AngularJS控制器在注入工厂时抛出错误
- 异步加载角度控制器和工厂
- 将工厂服务数据发送到控制器,以便在视图中使用
- 如何将控制器http调用转换为接受参数的服务/工厂模式
- 我是否需要将工厂调用放在控制器的函数中
- 工厂和控制器之间的“绑定”
- Angular,设置一个回调函数,用于在工厂和控制器之间更新
- 如何将数据从 angularJS 工厂填充到控制器
- 使用工厂/服务在控制器AngularJS之间推送数组中的数据
- 可以从控制器更新工厂,但不能从指令更新
- angular.js:13424 ReferenceError:在控制器中使用工厂方法时未定义索引
- 如何在angular js中将数据从工厂传递到控制器
- Angulrjs:控制器不会通过带有“as”语句的工厂发送值
- AngularJS:将逻辑部分从控制器带到服务(工厂)
- 带有工厂、服务和控制器的角度页面
- 角度控制器/工厂返回未定义的对象
- 控制器——工厂:传递参数