使用 AngularJS 在控制器之间传递变量
Passing variables between controllers using AngularJS
>我有两个控制器:控制器 1 和控制器 2
在控制器 1 的$scope
中,我已经设置了我需要的所有值。使用 $scope
中的数据,我尝试运行某些函数并将返回值传递给 Controller2。
我正在考虑创建一个工厂来将变量从控制器 1 传递到控制器 2。但是,我意识到我需要的所有输入值都存在于控制器 1 中。我想知道工厂是否可以在控制器 1 中运行时保留数据,并在控制器 2 中再次运行时返回该数据。
谢谢
工厂是一个单例,因此可用于在不同的控制器或指令之间共享数据。看看这里的小提琴手。我创建了一个工厂"sharedContext",可用于使用不同$scope在控制器之间共享任何键值对。
厂
myApp.factory("sharedContext", function() {
var context = [];
var addData = function(key, value) {
var data = {
key: key,
value: value
};
context.push(data);
}
var getData = function(key) {
var data = _.find(context, {
key: key
});
return data;
}
return {
addData: addData,
getData: getData
}
});
从需要共享对象的控制器可以调用工厂的"addData"方法将数据存储在一个键下。其他有兴趣访问共享数据的控制器/指令可以通过调用"getData"方法并传递正确的密钥来实现。
控制器(共享数据)
function MyCtrl_1($scope, sharedContext) {
$scope.input_1 = 5;
$scope.input_2 = 15;
$scope.add = function() {
$scope.result = $scope.input_1 + $scope.input_2;
sharedContext.addData("Result", $scope.result)
}
}
控制器(访问共享数据)
function MyCtrl_2($scope, sharedContext) {
$scope.getData = function() {
$scope.result = sharedContext.getData("Result").value;
}
}
这里唯一的假设是两个控制器都需要使用确切的密钥来共享数据。若要简化过程,可以使用常量提供程序来共享密钥。另请注意,我使用了下划线.js在共享上下文字典中查找键。
这是你能想到的最简单的解决方案。如您所见,工厂是一个简单的对象,并且由于该构造,它是通过引用而不是通过值传递的,这意味着在两个控制器中dataFactory
是相同的
http://plnkr.co/edit/eB4g4SZyfcJrCQzqIieD?p=preview
var app = angular.module('plunker', []);
app.controller('ControllerOne', function (dataFactory) {
this.formFields = dataFactory
});
app.controller('ControllerTwo', function (dataFactory) {
this.formData = dataFactory
});
app.factory('dataFactory', function () {
return {};
})
编辑
app.factory('dataFactory', function () {
var factory = {
method1: function (arg) {
console.log('method1: ', arg)
factory.method2('called from method1')
},
method2: function (arg) {
console.log('method2: ', arg)
}
}
return factory;
})
相关文章:
- 函数参数中的数据与指定变量之间的任何性能差异
- 什么是&&在没有if的行中的变量之间
- 标识符和变量之间的区别(在 JavaScript 中)
- JavaScript 减去两个变量之间的计算
- 使用 ng-model 定义变量之间的区别,而不是通过 AngularJS 中的控制器定义变量
- JS变量之间的区别是什么 - 带和不带美元符号
- 在变量之间添加文本
- Javascript对象,属性和变量之间的区别是什么,它们都是一样的吗?
- 如何在$作用域的两个变量之间设置双向绑定
- 我需要变量之间传递一个.js文件,一个.html和.css文件.我该怎么做呢?
- & lt; br>在javascript和PHP中的两个变量之间
- 打印一个javascript对象,变量之间有空格
- 在隔离作用域指令中,在作用域上定义变量和在控制器上定义变量之间有什么区别吗?
- 使用angular js在Javascript变量之间找到一个变量
- 我如何获得UTC时间变量之间的时间段基于我的本地时间
- 参数和局部变量之间有什么不同
- react中的类变量和函数变量之间的区别是什么
- javascript中局部变量和全局变量之间的区别
- Javascript:变量和变量之间的详细区别 == 假
- 声明变量之间的差异