2016-05-18 10 views
0

Моя цель состояла в том, чтобы использовать зависимую инъекцию константного значения (базового URL) для использования в определении свойства templateUrl компонента. Ничего до сих пор не сработало. Код ниже приведен в машинописном текстеУгловой 1.5 Компонент - инъекция зависимостей

Некоторое объяснение: app.core.Iconstants содержит значение baseUrl. app.core.AngularGlobals.appCoreConstants - это строка, представляющая «app.core.Constants».

Помните, я просто режу зубы Углового.

namespace donationEntry.Components { "use strict";

class test1 implements ng.IComponentOptions { 
    public static id: string = AngularGlobals.donationEntry + ".test1"; 
    bindings: any; 
    controller: any; 
    templateUrl: string; 

    constructor(clientContext: app.core.IConstants) { 
     this.bindings = { 
      textBinding: '@', 
      dataBinding: '<', 
      functionBinding: '&' 
     }; 
     this.controller = TestController; 
     this.templateUrl = clientContext.baseUrl + "Areas/ng/app/fundraising/donationEntry/components/test1/test1.html"; 
    } 
} 

// register the controller with app 
angular.module(AngularGlobals.donationEntry) 
    .component("test1", [app.core.AngularGlobals.appCoreConstants, (c) => new test1(c)]); 

}

Когда я запускаю это, я в конечном итоге со следующей ошибкой:

angular.js: 61 неперехваченным Ошибка: [$ Инжектор: modulerr] Не удалось создать экземпляр модуля приложения из-за : Ошибка: [$ инжектор: modulerr] не удалось создать экземпляр модуля donationEntry из-за: TypeError: t.charAt не является функцией

+0

Говорит вы вызываете Шар на объекте, который не имеет Шара, но я не вижу Шар в любом месте в предоставленном фрагменте вы уверены, что это проблема? –

+0

Облегчив проблему, я никогда не углублялся, однако, похоже, это связано с синтаксисом сокращения ярлыков, который я использовал. –

ответ

0

Это, кажется, работает, хотя я бы не назвал это самый красноречивый из ответов. Опять же, написано в машинописном тексте:

namespace donationEntry.Components { "use strict";

class test1 implements ng.IComponentOptions { 
    public static id: string = AngularGlobals.donationEntry + ".test1"; 
    bindings: any; 
    controller: any; 
    templateUrl: string; 


    constructor(clientContext: app.core.IConstants) { 
     this.bindings = { 
      textBinding: '@', 
      dataBinding: '<', 
      functionBinding: '&' 
     }; 
     this.controller = TestController; 
     this.templateUrl = clientContext.baseUrl + "Areas/ng/app/fundraising/donationEntry/components/test1/test1.html"; 
    } 
} 

// register the controller with app 
var clientContext = <app.core.IConstants>angular.injector(['ng', app.core.AngularGlobals.appCore]).get(app.core.AngularGlobals.appCoreConstants); 
angular.module(AngularGlobals.donationEntry) 
    .component("test1", new test1(clientContext)); 

}

0

Я стараюсь держаться подальше от инъекционного или модуля механизма угловых всякий раз, когда я могу, предпочитая прямые ES6.

Вы можете сделать:

//clientContext.ts 
export = { baseUrl: 'whateva' } 

А затем импортировать так:

import clientContext from './path/to/clientContext' 
+0

Спасибо. Это было бы здорово, однако даже сам клиентский контекст мог бы нуждаться в динамическом базовом литерале (у наших клиентов был бы другой, чем у нас). Конечно, понимайте свою неприязнь к инъекции, хе-хе. –

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