我新的角度,我面临的一些问题...AngularJS - 服务两个控制器之间共享与异步调用
我有一个共享相同的控制器两个指令和控制是一个服务请求json文件在异步调用($ http)。
指令需要相同的数据,并且两者几乎都是同一时间,但我只想进行一次调用并将数据检索到控制器并使用数据更新视图。
MainMenuHeader.js
(function() {
var app = angular.module("mainMenuHeaderModule", ["mainMenuControllerModule"]);
app.directive("mainheader", function() {
return {
restrict: "A",
transclude: true,
templateUrl: "TMainMenuHeader.html",
controller: "mainMenuController",
}
});})();
MainMenuAside.js
(function() {
var app = angular.module("mainMenuAsideModule", ["mainMenuControllerModule"]);
app.directive("mainaside", function() {
return {
restrict: "A",
transclude: true,
templateUrl: "TMainMenuAside.html",
controller: "mainMenuController"
}
});})();
MainMenuController.js
(function() {
var app = angular.module("mainMenuControllerModule", ["mainMenuServiceModule"]);
app.controller("mainMenuController", ["$scope", "MainMenuService",
function ($scope, MainMenuService)
{
$scope.menuList = MainMenuService.GetAsyncData();
console.log("mainMenuController menuList: " + $scope.menuList);
}]);
})
();
MainMenuService.js
(function() {
var module = angular.module("mainMenuServiceModule", []);
module.factory("MainMenuService", ["$q", "$http", function ($q, $http)
{
var data;
var getAsyncData = function()
{
console.log(" -> getting data...");
$http.get("menu.json")
.success(function(result)
{
data = result;
console.log("async data: " + data);
});
return data;
}
var getDataObject = function()
{
return [
{
id:1,
title: "Menu 1",
submenus: [
{
title: "Sub Menu 1",
itens: [
{ title: "Option 1" },
{ title: "Option 2" },
{ title: "Option 3" }
]
}
]
},
{
id:2,
title: "Menu 2",
submenus: [
{
title: "Sub Menu 2",
itens: [
{ title: "Option 1" },
{ title: "Option 2" },
{ title: "Option 3" },
{ title: "Option 4" },
{ title: "Option 5" }
]
}
]
},
{
id:3,
title: "Menu 3",
submenus: [
{
title: "Sub Menu 3",
itens: [
{ title: "Option 1" },
{ title: "Option 2" },
{ title: "Option 3" }
]
}
]
}
];
}
return {
GetDataObject : function()
{
return getDataObject();
},
GetAsyncData : function()
{
return getAsyncData();
}
}
}]);
})();
这项服务是两种方法。 一个返回一个JS对象仅用于测试,另一个返回一个不工作的$ http请求。
我也试过从服务返回一个延期并等待响应的控制器,但没有成功,也许我犯了一些错误......有人可以帮我吗?
我也做了一个plunker所以你看到在行动的问题......
http://plnkr.co/edit/7NIPeAsUYlh96p3hUij7
感谢您的时间... =)创建
谢谢!!! = D 这两个解决方案都适用于我的主项目! 我选择第一个。那样的话,我认为我可以在服务内部有一个模型的概念,并在那里改变数据,让控制器留下其他的东西...... – hsantos 2014-10-17 09:29:52