我试图在$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。路由,指向"../adHoc/adHoc .html"。这将重新加载应用程序,因此你会丢失addHocLevel2的值。
你需要重定向到它的哈希路由路径(例如#/adhoc) -根据你的routeProvider.when("/adhoc")配置,而不是../adhoc/adhoc.html。
我还认为,在angular的单页应用中移动时,最好的方法是使用$location.path(yourRoutePath)而不是$window。除非你想完全改变位置(新URL的某个地方)。
如
你有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
}
})
更新:我更新了你的活塞:http://embed.plnkr.co/01lfzd4Q4bFoSPAB4WIF/这就是我要做的——我相信还有其他方法。我使用index.html作为模板,并有main.html和adhoc.html作为其他两个页面,您可以根据URL切换到