Angular.js $ http $ window.location和全局变量

时间:2013-06-03 07:53:53

标签: http angularjs global-variables window.location

我正在尝试更新$ 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}} />

提前致谢

1 个答案:

答案 0 :(得分:3)

根据上面的代码,你有$ window.location = $ rootScope.routeAd.route,它指向“../adHoc/adhoc.html”。这将重新加载应用程序,因此您将失去addHocLevel2值。

您需要重定向到其哈希路径路径(例如#/ adhoc) - 根据您的routeProvider.when(“/ adhoc”)配置,而不是../ adHoc / adhoc.html。

另外我认为在angular的单页应用程序中移动的最佳方法是使用$ location.path(yourRoutePath)而不是$ window.location,除非你想完全改变位置(某处新的URL)。

e.g

您有2条路线设置:

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
    }
})

更新:我更新了你的plunker:http://embed.plnkr.co/01lfzd4Q4bFoSPAB4WIF/ 我就是这样做的 - 我相信还有另外一种方法。我使用index.html作为模板,并将main.html和adhoc.html作为其他2个可以根据URL切换到的页面。