为什么我的角度控制器没有初始化vm vars?

时间:2015-02-18 18:40:30

标签: angularjs

我在我的角度网络应用程序中使用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时,您是否知道我做错了什么因为返回了数据但是没有使用该数据初始化它们?

1 个答案:

答案 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");