我在我的角度网络应用程序中使用controller as语法,并且从控制器调用一个工厂,该工厂对具有var menuTitle
路径参数的URL执行REST GET调用:
angular.module('cmApp').factory('menuDataFactory', [ '$http', function($http) {
var urlBase = '/app_api/menu';
var dataFactory = {};
dataFactory.getHeaderMenu = function(menuTitle) {
return $http.get(urlBase + "/headerMenu/" + menuTitle, {
cache : true
});
};
在控制器中,我有一个功能,我尝试使用该功能为此菜单调用加载不同的结果,例如:
vm = this;
// registered user menus
vm.planMenuGroup = getHeaderMenuGroup("plan");
vm.planContentMenuGroup = getHeaderMenuGroup("plan_content");
vm.buyMenuGroup = getHeaderMenuGroup("buy");
vm.buyContentMenuGroup = getHeaderMenuGroup("buy_content");
vm.manageMenuGroup = getHeaderMenuGroup("manage");
vm.manageContentMenuGroup = getHeaderMenuGroup("manage_content");
function getHeaderMenuGroup(menuTitle) {
menuDataFactory.getHeaderMenu(menuTitle).then(function (response) {
return response.data;
});
}
在初始化此vm vars时,您是否知道我做错了什么因为返回了数据但是没有使用该数据初始化它们?
答案 0 :(得分:2)
如果你这样做:
vm.planMenuGroup = getHeaderMenuGroup("plan");
然后
vm.planMenuGroup
将始终未定义,因为getHeaderMenuGroup("plan");
不返回任何内容。它调用异步函数,您需要在回调中分配数据,如下所示:
function getHeaderMenuGroup(controllerVar, menuTitle) {
menuDataFactory.getHeaderMenu(menuTitle).then(function (response) {
controllerVar = response.data;
});
}
使用它:
vm = this;
// registered user menus
getHeaderMenuGroup(vm.planMenuGroup, "plan");