0

一般的なリスト ビューのコントローラーがあります。

(angular
 .module('app.controllers')
 .controller('ItemListContr', [
     /*****/ '$scope', 'ItemData',
     function($scope,   ItemData,) {
         ...
     }
 ])
);

は既存のコンポーネントの名前でItemDataはなく、ルートからコントローラーに挿入するサービスのプレースホルダー名です。

(angular
 .module('app', ['app.controllers', 'app.services'])
 .config([
     /******/ '$routeProvider',
     function ($routeProvider) {
         $routeProvider
             .when('/books', {
                 controller: 'ItemListContr',
                 resolve: {ItemData: 'BookData'},
                 templateUrl: 'book-list.html'
             })
             .when('/magazines', {
                 controller: 'ItemListContr',
                 resolve: {ItemData: 'MagazineData'},
                 templateUrl: 'magazine-list.html'
             })
     }])
);

ここでBookData、 とはモジュールMagazineDataで定義されたサービスです。app.services

テンプレート内でこのコントローラーを使用する必要もあります。

<span ng-controller="ItemListContr">...</span>

しかし、そのデータ ソースを提供する必要がありますItemData。そして、テンプレートからそれを行う方法がわかりません。

4

1 に答える 1

0

$injectorコントローラーで名前でサービスを取得するために使用できます。

このような:

var myApp = angular.module('myApp', []);

myApp.value('ItemData', 'BookData')

myApp.service('BookData', function () {
    return {
        test: function () {
            alert("Test called in BookData!");
        }
    }
});

myApp.controller('ItemListContr', function ($scope, $injector, ItemData) {
    var myService = $injector.get(ItemData);
    myService.test();
});

そして、ここにフィドルがあります

于 2014-08-18T19:50:52.920 に答える