Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 角度$state.go_Angularjs_State - Fatal编程技术网

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<代码>请求。考虑在<代码>解决< <代码> >代码>国家。详细< <代码>或从<代码>国家。详细< <代码>控制器。在我的服务中,$HTTP请求。看到我的第一个问题,我添加了一个更新版本,但您不想在您之前做这个请求。e路由。您的数据最终进入了错误的控制器范围,但是您的服务创建了自己的承诺,然后它返回了由
$http
创建的承诺。您不需要创建自己的承诺……那么什么是正确的解决方案呢?因为我是angular的新手,我在线学习了一个教程,我认为这是一个很好的方法ch将服务和控制器分开A更好:)我会试试这个,让你知道,谢谢!第一种选择对我很有效。我想避免使用另一个控制器,但我想我别无选择。谢谢你,先生。