[英]Angularjs not updating data inside $http.get
这是我的代码:
$scope.t = ["lapi", "laptop"];
$scope.$watch('search', function(newval, oldval){
$scope.alldata = [];
$http.get('http://localhost/serve/?p=12345').
then(function(data){
var x = Math.floor((Math.random() * 2));
$scope.alldata.push($scope.t[x])
},
function(){
console.log("error")
});
return $scope.alldata;
});
每次它更新与以前的结果。
如果我在 push 之后执行 $scope.$apply() ,
它显示错误:[$rootScope:inprog]
我不知道如何更新这些数据。
<!DOCTYPE> <html ng-app="test"> <head> <title></title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.2/angular-route.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/0.13.0/ui-bootstrap-tpls.min.js"></script> <script src="sys.js"></script> </head> <body ng-controller="main"> <p>Angularjs Test</p> <input type="text" ng-model="search" typeahead="data for data in alldata | filter:$viewValue | limitTo:10"autofocus> </body> </html>
var app=angular.module('test', ["ui.bootstrap"]); app.controller("main", function($scope, $http, $timeout, $q){ console.log("main"); var timer = false; $scope.search = ""; $scope.t = ["vijay", "vijaypal"]; $scope.alldata = []; $scope.getLog = function(){ console.log("rootscope called"); }; $scope.$watch('search', function(newval, oldval){ if(timer) { $timeout.cancel(timer); } timer = $timeout(function(){ $scope.alldata = []; var rd='&_rd='+new Date().getTime(); var deferred = $q.defer(); $http.get("http://rec.cloudinfra.in/rec_serve_property/?p=3903405"+rd). then( function(data) { var x = Math.floor((Math.random() * 2)); $scope.alldata.push($scope.t[x]); deferred.resolve($scope.alldata) console.log("start:", $scope.alldata); return deferred.promise; }, function (){ console.log("error"); }); }, 100); console.log("end:", $scope.alldata); }); });
检查控制台日志你会得到问题
看起来像缓存问题并尝试将请求更改为
var rd='&_rd='+new Date().getTime();
$http.get('http://localhost/serve/?p=12345'+rd)
所以你每次都可以有不同的要求
语法是$http.get().success(function(){}).error(function(){}); 据我所知。
$scope.t = ["lapi", "laptop"];
$scope.$watch('search', function(newval, oldval){
$scope.alldata = [];
$http.get('http://localhost/serve/?p=12345').success(function($data) {
//$data is the data stripped from the response! unlike XMLHttpRequest
var x = Math.ceil(Math.random() * 2) - 1; //This wasn't an integer
$scope.alldata.push($scope.t[x]);
//no need to return
}).error(function() {
console.log('error');
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.