我试图在$http请求中更新一个全局变量,重定向到一个新页面,然后打印该变量(出错时)。我不确定我做的是否正确,但当我试图打印变量($rootscope.adHocLevel2)时,它仍然是空的。
在js文件中

$scope.searchStep2 = function(option) {
  $http.post($scope.url, { "option" : option}).
    success(function(data, status) {
      $scope.status = status;
      $scope.data = data;
      $rootScope.response = data;
      })
    .
    error(function(data, status) {
      $scope.data = data || "Request failed";
      $scope.status = status;
      $rootScope.response = 'Request failed';
      $rootScope.routeAd = {"route": "../adHoc/adhoc.html"};
      $rootScope.addHocLevel2 = {"suggestedCategory": "Car","suggestedLocLabel": "world","suggestedShadowURL": "http://www.toyota.com/auris/hybrid"};
      $window.location=$rootScope.routeAd.route;
});
};

在HTML中,我试图打印
<input type="text" ng-model="optLocation" value={{addHocLevel2}} />

先谢谢你

最佳答案

基于以上代码,您有$window.location=$rootscope.routead.route,它指向“./adhoc/adhoc.html”。这将重新加载应用程序,因此您将丢失addHoClevel2值。
您需要根据您的routeprovider.when(“/adhoc”)配置重定向到其散列路由路径(例如/adhoc),而不是../adhoc/adhoc.html。
另外,我认为在Angular的单页应用程序中移动的最好方法是使用$location.path(yourRoutePath)而不是$window.location,除非您想完全更改位置(在某个地方使用新的URL)。
例如
您有两个路由设置:

app.config(function($routeProvider){
    $routeProvider
        .when('/main', { templateUrl:'/main/main.html',controller:'MainCtrl'})
        .when('/adhoc', { templateUrl: '/adHoc/adhoc.html',controller:'AdHocCtrl});
}

然后假设您想从/main重定向到/adhoc,它会如下所示:
app.controller('MainCtrl',function($rootScope,$scope,$location,$http){
    $http.post(...).error(function(data,status){
       $rootScope.addHocLevel2 = {...};
       $location.path("/adhoc"); // this will 'redirect' you to adHoc/adhoc.html page
    }
})

更新:我更新了你的掠夺者:http://embed.plnkr.co/01lfzd4Q4bFoSPAB4WIF/
我就是这样做的-我相信还有其他的方法。我使用index.html作为模板,使用main.html和adhoc.html作为其他两个页面,您可以根据url切换到这两个页面。

关于http - Angular.js $ http $ window.location和全局变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16892238/

10-10 12:30