我尝试使用服务,工厂或广播在控制器之间传递数据的所有方法。它们都不适合我。我在网上遵循确切的解决方案,但仍然不幸。我把服务放在我的app.js里。
App.JS
myApp.service('customService', [function () {
this.list = [];
this.setObject = function (o) {
this.list.push(o);
},
this.getObject = function () {
return this.list;
}
}]);
控制器#1
myApp.controller('Controller1', function ($scope, customService) {
customService.setObject({..});
$window.open("/controller2", '_blank');
}
控制器#2
myApp.controller('Controller2', function ($scope, customService) {
console.log(customService.getObject()); // Returns []
}
问题
它从控制器1返回控制器2上的[],而不是对象数据。
答案 0 :(得分:0)
您的控制器是否在同一页面上?
Angular.js只能在单个页面上保存数据。如果您的页面重新加载 (你似乎在说“express.js加载下一个时” 页面“,然后它重新初始化了一切。
你应该:
看看如何使用Angular.js路由 (http://docs.angularjs.org/tutorial/step_07)以便留在 同一页。使用某些东西来保存您的数据,例如localstorage。 了解更多信息:http://diveintohtml5.info/storage.html
答案 1 :(得分:0)
您应修改服务以在某个特定密钥下存储对象,然后在给定该密钥后再检索它。您可以随意定义这些键。我在同一个服务中定义它们,所以我可以通过所有控制器重用它们。像这样的东西
<强>服务强>
myApp.service('customService', [function () {
this.keys = {"foo": "foo", "bar": "bar"};
this.list = {};
this.setObject = function (obj, key) {
this.list[ley] = obj;
},
this.getObject = function (key) {
return this.list[key];
}
}]);
控制器#1
myApp.controller('Controller1', function ($scope, customService) {
customService.setObject({"propX": "propX"}, customService.foo);
//$window.open("/controller2", '_blank');
/* I encourage you to use something like ngRoute here for navigating
* so, you should do something like $location.path('/controller2');
*/
}
控制器#2
myApp.controller('Controller2', function ($scope, customService) {
console.log(customService.getObject(customService.foo));
}
答案 2 :(得分:0)