我新的角度,我面臨的一些問題...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