javascript - 当数据通过 Angularjs 解析到达时如何触发渲染模板

标签 javascript angularjs

我可以像这样在 Controller 中调用第一次加载

function RankCtrl($scope, $route, $routeParams, Rank) {
   $scope.leagues = Rank.query($routeParams)
}

当路由改变时,我使用 resolve 从服务器加载数据。 (并且更改路由只是对服务器的 json 请求,因此页面中不会刷新任何内容。)

app.config(function($routeProvider, $locationProvider) {
  $routeProvider.when('/rank/:type/:top', {
    controller: "RankCtrl",
    resolve: {
      leagues: function($route, $q, Rank) {
        return Rank.query($route.current.params)
      }
    }
  })

  $locationProvider.html5Mode(true);
});

我可以看到数据已通过 chrome 开发工具从服务器正确检索。

但是数据去了哪里?我喜欢将该数据分配给 $scope.leagues,并希望根据新数据更新 View (模板)。

我还尝试使用 $scope.$on('$routeChangeSuccess') 事件,但全局触发所有路由更改不仅限于此 Controller 。

$scope.$on('$routeChangeSuccess', function(next, current) { 
  $scope.leagues = Rank.query($routeParams);
});

如有任何帮助,我们将不胜感激。

最佳答案

您需要使用解析属性的名称(leagues)注入(inject)RankCtrl

function RankCtrl($scope, $route, $routeParams, leagues) {
   $scope.leagues = leagues;
}

更新:

根据 Angular 版本,您可能需要手动构造和解析 promise 对象:

/* ... */
resolve: {
  leagues: function($route, $q, Rank) {
    var deferred = $q.defer();
    return Rank.query($route.current.params, function(leagues){
      deferred.resolve(leagues);
    });
    return deferred.promise;
  }
}

关于javascript - 当数据通过 Angularjs 解析到达时如何触发渲染模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20839398/

相关文章:

javascript - Webpack - 在 Angular 2 中调用外部 JS

javascript - 在 Angularjs 中将服务与 Controller 分开

javascript - 使用 ngModel 的 Angular 递归指令

javascript - Angularjs获取具有最高值的变量名称

javascript - Angular JS : Promise returns resource

javascript - 什么时候应该使用继承作用域,什么时候不应该使用?

javascript - 用于相对于用户在约束内单击的位置定位框的数学公式?

javascript - 将多个对象转换为一个具有相同键、值的对象作为数组

javascript - 将数组元素添加到另一个数组

javascript - Ractive/Paths.js 演示中的预期长度错误