【问题标题】:Templates from templatecache not rendering bindings when data is returned from $http in 1.2+在 1.2+ 中从 $http 返回数据时,来自 templatecache 的模板不呈现绑定
【发布时间】: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


【解决方案1】:

好吧,我在您的代码中看到了一些语法错误(也许您没有复制代码,而是手动输入了代码,所以不确定)。您还返回了 deferred 而不是 deferred.promise。你想要达到的效果很好:

Plnkr Example

【讨论】:

  • 非常感谢!我将对帖子进行一些更正,我确实直接输入了:) 想知道为什么这不是我在本地得到的行为...我不确定导致问题的来回导航是否可以在 plnkr 中复制?
  • 好吧,你可以来回前进。在 plnkr 中对我来说仍然可以正常工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-18
  • 2018-12-16
  • 2022-11-24
  • 2019-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多