ui-路由解析无效
ui-route resolve not working
我的应用程序需要一些基本数据才能启动。这就是为什么我创建了一个服务并将其用作该公共数据的模型,以便所有控制器都可以访问它。我正在尝试使用 ui-route 的 reslove 功能来解析服务,该功能表示如果我 return 一个承诺,那么它会在控制器开始执行之前得到解决,但它对我不起作用。这是我的代码
服务:
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 似乎没有 return 任何承诺。
我会将 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;
};
我的应用程序需要一些基本数据才能启动。这就是为什么我创建了一个服务并将其用作该公共数据的模型,以便所有控制器都可以访问它。我正在尝试使用 ui-route 的 reslove 功能来解析服务,该功能表示如果我 return 一个承诺,那么它会在控制器开始执行之前得到解决,但它对我不起作用。这是我的代码
服务:
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 似乎没有 return 任何承诺。
我会将 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;
};