2016-10-16 2 views
1

Я хочу вызвать функцию из службы, которую я создал, когда вы нажимаете на что-то, но я не могу заставить ее работать. Я упростил это как можно больше, чтобы убедиться, что этот тип функциональности даже возможен.Угловая 2: Используйте (нажмите), чтобы вызвать функцию в службе

У меня есть следующий HTML:

<a (click)="SellingVarietiesService.goToVarietyDetails(3)">Test</a> 

Вот код для функции Я хочу, чтобы вызвать:

@Injectable() 
export class SellingVarietiesService {  

    constructor(private http: Http) { } 

    public goToVarietyDetails(varietyId: any): void {   
     console.log(varietyId); 
    } 
} 

HTML, генерируется с помощью .NET/C# и вернулся из HTTP-вызов в службе, которую я создал. Можно ли вызвать эту функцию в моей службе с помощью HTML, который возвращается мне? У меня просто неправильный синтаксис?

EDIT:

Я использовал DomSanitizer на HTML, что я вернулся (в HTML, который содержит (нажать) функцию). Вот код из моего компонента, который использовал его:

// Get Variety List 
getVarietyList() {   
    this.sellingMenuService.getVarieties().subscribe(res => {    
     this.varietyListSelling = this.sanitizer.bypassSecurityTrustHtml(res); 
    }); 
} 

А вот HTML, где что получает размещены:

<div *ngIf="varietyListSelling" [innerHtml]="varietyListSelling"></div> 

Вот пример из того, что res может выглядеть следующим образом:

<div class="varietyName"> 
    <a class="" (click)="sellingVarietiesService.goToVarietyDetails(1176)" >Starbor</a> 
    <a href="#deleteVarietySelling" id="deleteVarietySelling_1176" class="quick-delete fa-minus-button" title="Delete" data-toggle="modal"> 
     <i class="fa fa-minus"></i> 
    </a> 
</div> 
+0

Как выглядит 'res'? – yurzui

+0

Я добавил к концу своего сообщения. Уведомление (нажмите) = «salesVarietiesService.goToVarietyDetails (1176) есть, но не работает. – Brett

+0

Это не сработает, потому что он должен быть скомпилирован сначала – yurzui

ответ

3

Вам необходимо ввести услугу в компонент, который содержит ваш html

@Component({ 
    template: `<a (click)="svs.goToVarietyDetails(3)">Test</a>` 
}) 
export class MyComponent { 
    constructor(public svs: SellingVarietiesService) {} 
} 

Затем вы можете получить к нему доступ через свойство компонента.

+0

Yup, я сделал это, но он все еще не работает. Мне интересно, не потому ли, что HTML подан из моего .NET-сервера. Я не знаю, вызвало бы это проблемы, но я не могу думать о какой-либо другой причине ... – Brett

+0

Если это так, обратите внимание на [DomSanitizer] (https://angular.io/docs/ts/latest/api/ platform-browser/index/DomSanitizer-class.html) – Sasxa

+0

Я обновил сообщение, чтобы показать, как я использовал DomSanitizer. Есть ли другой способ использовать его? – Brett

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