0

コントローラーにデータをプリロードしたい。私はルートプロバイダでこれを使用resolveしています:

.when('/customers', {
    controller: 'CustomerController', templateUrl: '/Customer/Index', resolve: {
        countries: CustomerController.loadCountries,
        genders: CustomerController.loadGenders,
    }
})

ご覧のとおり、国と性別という 2 つのオブジェクトがコントローラーに注入されます。これはすべて正常に機能します。

私がやりたいことは、これらのオブジェクトを 1 つのオブジェクト listData の一部にしたいということです。私はもう試した:

.when('/customers', {
    controller: 'CustomerController', templateUrl: '/Customer/Index', resolve: {
        listData: {
            countries: CustomerController.loadCountries,
            genders: CustomerController.loadGenders
        }
    }
})

しかし、これは機能しません: Argument 'fn' is not a function, got Object.

これを達成するための正しい構文/アプローチは何ですか?

4

1 に答える 1

1

オブジェクトをキーに渡す場合、値として関数が必要です:

listData: function () {
  // you need to inject 
  var deferred = $q.defer();
  var listData = {};
  // these should be services, btw !
  CustomerController.loadCountries.then(function (countries) {
    listData.countries = countries;
    // resolve when you have both
    if (listData.genders) deferred.resolve(listData);
  });
  CustomerController.loadGenders.then(function (genders) {
    listData.genders = genders;
    if (listData.countries) deferred.resolve(listData);
  });
  return deferred.promise;
}
于 2013-06-20T10:20:35.257 に答える