javascript - Controller 完成参数加载后如何以 Angular 加载模板?

标签 javascript angularjs

我遇到的问题是模板加载早于 Controller 中的参数,因此用户看到的是空 block 。

Controller :

app.controller('mainDashboardApi', ['$scope', '$http',
    function($scope, $http) {
        $http.get('api/dashboard/main').success(function(data) {
            $scope.dashboard = data;
        });
    }
]);

路由器:

$stateProvider
    .state('dashboard', {
        url: "/dashboard",
        templateUrl: "dashboard",
        controller: 'mainDashboardApi'
    })

如何在参数加载完成后加载模板?

最佳答案

您可以做很多事情。

您可以隐藏空 block ,并仅在数据加载时显示它们:

app.controller('mainDashboardApi', ['$scope', '$http',
    function($scope, $http) {
        $scope.isLoading = true;

        $http.get('api/dashboard/main').success(function(data) {
            $scope.dashboard = data;
            $scope.isLoading = false;
        });
    }
]);

那将是手动方式。

但是 ui.router 支持这种场景(ngRoute 也是如此),带有状态的 resolve 参数,您可以在其中延迟加载 View 直到所有 promise 都已解决(或其中一个被拒绝):

$stateProvider
    .state('dashboard', {
        url: "/dashboard",
        templateUrl: "dashboard",
        controller: 'mainDashboardApi',
        resolve: {
          dashboard: function($http){
             return $http.get('api/dashboard/main')
                      .then(function(response){
                         return response.data;
                      })'
          }
        }
    })

然后,可以将 dashboard 注入(inject)(就像您注入(inject)其他服务一样)到 mainDashboardApi Controller 中:

app.controller('mainDashboardApi', ['$scope', 'dashboard',
    function($scope, dashboard) {
        $scope.dashboard = dashboard;
    }
]);

关于javascript - Controller 完成参数加载后如何以 Angular 加载模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30202232/

相关文章:

javascript - JQuery UI slider 的“更改”事件问题

javascript - Angular.js $http.post 类型错误 : Cannot read property 'data' of undefined

angularjs - 在 $routeProvider 解析中返回相互依赖的异步 promise

javascript - 显示特定对象的 'details' - 将 JSON 值从一个页面传递到另一页面以查询 API

javascript - 当数据来自 ASYNC 函数时,ng-bind-html 指令不显示 "0"

javascript - 指令需要在元素呈现后更新数据

javascript - 将 Revolution Slider 5+ 图层设置为静态图层

javascript - 轴-范围- slider 对齐

javascript - 使用其参数调用 Angular js 中的函数

javascript - 矛盾的李悬停