2014-09-12 4 views
0

Глядя на ответ здесь: https://stackoverflow.com/a/19272093/2547709

Использование $ впрыснуть синтаксис мой контроллер заканчивает тем, как это:

class MyCtrl { 

    public static $inject: string[] = ['$scope']; 
    constructor($scope){ 
    // stuff 
    } 
} 
// register the controller 
app.controller("MyCtrl", MyCtrl); 

Мой вопрос это- что произойдет, если я хочу передать свои собственные аргументы конструктору, а также любые впрыскивается переменные ?:

class MyCtrl { 

    public static $inject: string[] = ['$scope']; 
    constructor($scope, customArg){ 
    // stuff 
    } 
} 
// Now how do I pass customArg in without it complaining? 
app.controller("MyCtrl", MyCtrl(customArg)); // Nope 

Я чувствую, что я что-то фундаментальное отсутствует, с помощью этого синтаксис, все, что вы передаете функции .controller(), должно быть зарегистрировано угловым, и поэтому я не должен вообще пытаться передавать пользовательские аргументы? Или я могу передать произвольное значение/объект? И если да, то как?

+1

Какой пример того, что вы хотите передать? Можете ли вы зарегистрировать его с угловым использованием углового значения? –

ответ

3

customArg

Вы не можете передать в пользовательский аргумент, если угловой собирается вызвать конструктор. Вы можете однако зарегистрировать другие вещи с помощью Angular, например. Услуги, Заводы, Значения (константы), которые угловой передадут вам контроллер.

Подробнее: https://www.youtube.com/watch?v=Yis8m3BdnEM&hd=1

+1

Спасибо @basarat, я поклонник ваших видеороликов, они действительно помогают мне понять, как использовать машинописные тексты идиоматически с чем-то вроде углового! – ptr

+0

Большое спасибо! – basarat

+0

Если вам интересно, у меня есть новый вопрос: [здесь] (http://stackoverflow.com/questions/25844887/extending-angularjs-directives-with-typescript) – ptr

0

К сожалению для ответа у меня нет достаточно очков, чтобы комментировать.

У меня точно такой же сценарий, и вот моя ситуация:

export abstract class DataService {

static $inject = ['$resource']; 
    private svc: ng.resource.IResourceClass<ng.resource.IResource<T>>; 

    constructor(
     protected $resource: ng.resource.IResourceService, url: string 

    ) { 
     this.svc = <ng.resource.IResourceClass<ng.resource.IResource<T>>>this.$resource(url, { id: '@id' }); 
    } 

    public get(id: number): ng.IPromise<T> { 
     return this.svc.get({ id: id }).$promise; 
    } 

} 

export class MyDataService 
    extends DataService<IItem> { 


    // big problem here!!! 
    constructor(
    ) { 
     super("/api/items/:id"); 
    } 

} 

Похоже, мне придется повторить инъекцию на каждом производном классе, а также проходит в супер ... так избыточные

Смежные вопросы