angularjs – ui-route解决不起作用
发布时间:2020-12-17 17:16:03 所属栏目:安全 来源:网络整理
导读:我的应用程序需要一些基本数据才能启动.这就是我创建服务的原因,我将它用作该公共数据的模型,以便所有控制器都可以访问它.我正在尝试使用ui-route的reslove功能解决该服务,该功能说如果我返回一个promise,那么它将在控制器执行开始之前得到解决,但它对我不起
我的应用程序需要一些基本数据才能启动.这就是我创建服务的原因,我将它用作该公共数据的模型,以便所有控制器都可以访问它.我正在尝试使用ui-route的reslove功能解决该服务,该功能说如果我返回一个promise,那么它将在控制器执行开始之前得到解决,但它对我不起作用.这是我的代码
服务: var Data = function ($q,$http) { var list = {}; var cachedData; var resolveData; resolveData = function () { return $http.get('/api/data') .then(function (response) { var deferred = $q.defer(); deferred.resolve(list.setData(response.data)); return deferred.promise; },function (response) { }); }; list.getData = function () { if (cachedData) { return cachedData; } else { resolveData(); } }; list.setData = function (data) { cachedData = data; return data; }; return list; }; Data.$inject = ['$q','$http']; 路线: .state('temp',{ url: 'temp',templateUrl: '/temp',controller: 'temp',resolve: { data: function (data) { return data.getData(); } } }) 控制器: var temp = function(data,$scope){ console.log('asad'); $scope.showLoading = true; $scope.prefixes = data.something; //not working $scope.lists = data; }; temp.$inject = ['data','$scope']; 解决方法
首先,使用plunker更容易.
但似乎函数getData没有返回任何承诺. 我会将getData()改为: list.getData = function () { var deferred = $q.defer(); if (cachedData) { deferred.resolve(cachedData); } else { resolveData().then(deferred.resolve).catch(deferred.reject); } return deferred.promise; }; 顺便说一句,我还将resolveData()更改为: resolveData = function () { var deferred = $q.defer(); $http.get('/api/data') .then(function (response) { list.setData(response.data); deferred.resolve(response.data); }); return deferred.promise; }; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |