【发布时间】:2014-02-08 20:38:56
【问题描述】:
我有一个基本应用程序,它通过 $http 服务获取一些数据,但是当从模板缓存提供模板时,它不会在模板中正确呈现数据。我的代码如下所示:
angular.module('app', [])
api服务:
.factory('api', function($http, $q) {
return {
getCars: function() {
return $http.get('api/cars');
}
};
})
使用服务的控制器:
.controller('carsCtrl', function($scope, api) {
api.getCars().success(function(data) {
$scope.cars = data;
});
})
路线设置:
.config(function($routeProvider) {
$routeProvider.when('/cars', {
templateUrl: 'cars.html',
controller: 'carsCtrl'
});
});
和模板cars.html
<div ng-repeat="car in cars">
{{ car }}
</div>
这在浏览器第一次点击/cars 时有效,但是,如果我在浏览器中按下后退前进按钮第二次点击网址而不重新加载页面,{{car}} 不会被呈现。如果 cars.html 像这样放在 templateCache 中:
angular.module('app').run(function($templateCache) {
$templateCache.put('cars.html', '<div ng-repeat="car in cars">{{ car }}</div>');
});
{{car}} 绑定也不会呈现。
我怀疑这与 Angular 不再在模板中展开承诺有关,但不完全确定。有谁知道我做错了什么以及如何正确编写此代码?
【问题讨论】:
-
作为观察,
$http返回一个承诺,因此您可以将getCars()函数缩短为简单的return $http.get('api/cars') -
是的,你是对的,我已经用这些变化更新了我的问题。他们没有解决问题。
标签: angularjs http templates caching