一个控制器及其在模板依赖 [英] a controller and its dependencies in a template

查看:73
本文介绍了一个控制器及其在模板依赖的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个通用的列表视图控制器:

I have a controller for a generic list view:

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

其中,的ItemData 不是现有组件的名称,但我注入由路由控制器的服务的占位符名称:

where ItemData is not the name of an existing component, but a placeholder name for a service that I inject into the controller from a route:

(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 模块。

我还需要使用模板内该控制器:

I also need to use this controller inside a template:

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

但我需要提供数据源的ItemData 它。我不知道如何从一个模板做到这一点。

but I need to supply the data source ItemData for it. And I do not know how to do it from a template.

推荐答案

您可以使用 $注射器按名称来获得你的服务在控制器中。

You can use $injector to get your service by name in the controller.

这样的:

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();
});

这里是一个小提琴

这篇关于一个控制器及其在模板依赖的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆