$http 得到不刷新的结果
$http get not refreshing result
我正在尝试用 angularJS 做一些例子:
Html:
<html ng-app="myApp">
<body ng-controller="JokesController">
<h1>{{ joke }}<h1>
</body>
</html>
脚本:
<script type="text/javascript">
m.factory('$jokeService', function($http, $interval) {
var service = {
joke: ""
};
service.randomize = function () {
$http.get("http://api.icndb.com/jokes/random")
.success(function(data) {
service.joke = data.value.joke;
console.log(service.joke)
})
.error(function(data) {
console.log(data)
});
}
$interval(function() {
service.randomize();
}, 2000)
return service;
});
m.controller('JokesController', function($scope, $jokeService) {
$scope.joke = $jokeService.joke;
});
</script>
html 中未显示笑话值。
我错过了什么吗?
$jokeService.joke
的值在 $scope.joke = $jokeService.joke;
的控制器中被复制一次。要绑定到不断变化的值,请设置 $scope.service = $jokeService
并将 HTML 中的绑定更改为 service.joke
.
对于您的可视化,情况是这样的:
- AngularJS 尝试创建控制器,但发现服务依赖项
- AngularJS 创建并运行服务
- AngularJS 创建并运行控制器(值在此处复制)
- 控制器的范围附加到 HTML 元素
您需要在控制器中解决工厂返回的承诺。我们还可以通过移动解析逻辑和更改注入来简化您的服务。观察以下变化...
.factory('$jokeService', function($http) {
function getJoke() {
return $http.get('http://api.icndb.com/jokes/random');
}
return {
getJoke: getJoke
};
});
.controller('JokesController', function($scope, $jokeService, $interval) {
$interval(function() {
$jokeService.getJoke().then(function(response) {
$scope.joke = response.data.value.joke;
});
}, 2000);
});
Plunker Link - 工作演示
我正在尝试用 angularJS 做一些例子:
Html:
<html ng-app="myApp">
<body ng-controller="JokesController">
<h1>{{ joke }}<h1>
</body>
</html>
脚本:
<script type="text/javascript">
m.factory('$jokeService', function($http, $interval) {
var service = {
joke: ""
};
service.randomize = function () {
$http.get("http://api.icndb.com/jokes/random")
.success(function(data) {
service.joke = data.value.joke;
console.log(service.joke)
})
.error(function(data) {
console.log(data)
});
}
$interval(function() {
service.randomize();
}, 2000)
return service;
});
m.controller('JokesController', function($scope, $jokeService) {
$scope.joke = $jokeService.joke;
});
</script>
html 中未显示笑话值。 我错过了什么吗?
$jokeService.joke
的值在 $scope.joke = $jokeService.joke;
的控制器中被复制一次。要绑定到不断变化的值,请设置 $scope.service = $jokeService
并将 HTML 中的绑定更改为 service.joke
.
对于您的可视化,情况是这样的:
- AngularJS 尝试创建控制器,但发现服务依赖项
- AngularJS 创建并运行服务
- AngularJS 创建并运行控制器(值在此处复制)
- 控制器的范围附加到 HTML 元素
您需要在控制器中解决工厂返回的承诺。我们还可以通过移动解析逻辑和更改注入来简化您的服务。观察以下变化...
.factory('$jokeService', function($http) {
function getJoke() {
return $http.get('http://api.icndb.com/jokes/random');
}
return {
getJoke: getJoke
};
});
.controller('JokesController', function($scope, $jokeService, $interval) {
$interval(function() {
$jokeService.getJoke().then(function(response) {
$scope.joke = response.data.value.joke;
});
}, 2000);
});
Plunker Link - 工作演示