0

サーバーからのデータがロードされたときにテンプレートを表示したいと思います。

データをロードするためにいくつかのサービスを内部に持つ Services というモジュールを作成しました。私の例では HomeService を使用しています。

var app = angular.module('MyApp', ['Services']);

app.config(['$routeProvider', function($routeProvider) {
    $routeProvider
        .when('/', 
        {
            templateUrl: 'home.html',
            controller: 'Home_Ctrl',
            resolve: {
                loadData: //??
            }
        });
}]);

app.controller('Home_Ctrl', ['$scope', 'HomeService', function($scope, HomeService) {

    $scope.data = HomeService.getData();

}

そのための約束を作る必要があると思います。この関数をコントローラー内に配置することは可能ですか?

つまり、次のようなことはしたくありません。

var ctrl = app.controller('Home_Ctrl', ['$scope', 'HomeService', function($scope, HomeService) {
    //Do something
}

//Promise
ctrl.fct = function($q) {
}

私はそのようなものが欲しい:

app.controller('Home_Ctrl', ['$scope', '$q', 'HomeService', function($scope, $q, HomeService) {

    //Do something

    //Promise
    this.fct = function() {}
}

何か案が?

ありがとう。

4

1 に答える 1

2

コントローラーの resolve プロパティを使用できます。promise を返し、コントローラー解決関数に割り当て、コントローラー定義に同じものを挿入するオブジェクトを作成できます。非常に単純な例を参照してください。

$routeProvider.when('/ExitPoll', {
        templateUrl: '/partials/ExitPoll.html', controller: exitpollController, resolve: {
            responseData: ['$http', function ($http) {
                return $http.get('/Candidate/GetExitPolls/hissar').then(function (response) {
                    return response.data;
                });
            }],

        }
    });


var exitpollController = ['$scope', '$http','responseData','$rootScope',
function ($scope, $http, responseData, $rootScope) {
}];
于 2013-03-19T05:02:04.210 に答える