Angularjs 角度$state.go
在我的模板中,我有以下代码:Angularjs 角度$state.go,angularjs,state,Angularjs,State,在我的模板中,我有以下代码:{{country.name} 在我的ng控制器中,我使用以下代码从数据库中的国家/地区表检索数据: $scope.countryDetail= function (id) { if (!id) return; Country.countryDetail(id) .then(function (data) { $scope.loadedCountry = Country.loadedCountr
{{country.name}
在我的ng控制器中,我使用以下代码从数据库中的国家/地区表检索数据:
$scope.countryDetail= function (id) {
if (!id) return;
Country.countryDetail(id)
.then(function (data) {
$scope.loadedCountry = Country.loadedCountry ;
console.log($scope.loadedCountry);
$state.go('country.detail', { 'countryId': id });
});
};
My service :
countryService.countryDetail = function (id) {
var deferred = $q.defer();
return $http.get(countryUrl + "detail/" + id)
.success(function (data) {
deferred.resolve(
countryService.loadedCountry = data);
})
.error(function (error) {
deferred.reject(error);
})
return deferred.promise;
}
我的app.js中的状态
.state('country.detail', {
url: '^/country/detail/{countryId:[0-9]{1,6}}',
templateUrl: 'app/country/countryDetail.html',
controller: 'countryCtrl'
})
当我单击country name链接时,控制台显示具有良好值的country对象,但country.detail模板具有空的country对象。当我在函数后添加
$scope.countryDetail()
时,数据显示在详细信息模板中,但服务器中有2个调用!!那么,如何只使用一个调用而不再次调用$scope.countryDetail()
?。谢谢好的。让我解释一下你在做什么:
- 单击链接以显示国家/地区
- 加载国家/地区并将其存储在范围中
- 去另一个州
- 单击链接以显示国家/地区
- 转到另一个配置为使用另一个控制器的状态:CountryDetailController
- 在CountryDetailController中,从服务器获取国家详细信息并将其存储在范围中
resolve
参数(文档中对此进行了解释,以便发生以下情况:
- 单击链接以显示国家/地区
- 转到另一个配置为使用另一个控制器的状态:CountryDetailController
- ui路由器调用resolve函数,返回国家/地区详细信息的承诺。它等待国家/地区可用
- 当国家/地区可用时,路由器实例化CountryDetailController并注入国家/地区本身
- 在CountryDetailController中,从函数参数获取注入的国家详细信息,并将其存储在作用域中
$http
创建的承诺。您不需要创建自己的承诺……那么什么是正确的解决方案呢?因为我是angular的新手,我在线学习了一个教程,我认为这是一个很好的方法ch将服务和控制器分开A更好:)我会试试这个,让你知道,谢谢!第一种选择对我很有效。我想避免使用另一个控制器,但我想我别无选择。谢谢你,先生。