У меня есть итоговая самозагрузка шаблон с несколькими виджетами, которые я пытаюсь преобразовать в угловую 2. Это один имеет меня в тупике:Преобразование Углового директиву 1.x угловому 2
.directive('changeLayout', function(){
return {
restrict: 'A',
scope: {
changeLayout: '='
},
link: function(scope, element, attr) {
//Default State
if(scope.changeLayout === '1') {
element.prop('checked', true);
}
//Change State
element.on('change', function(){
if(element.is(':checked')) {
localStorage.setItem('ma-layout-status', 1);
scope.$apply(function(){
scope.changeLayout = '1';
})
}
else {
localStorage.setItem('ma-layout-status', 0);
scope.$apply(function(){
scope.changeLayout = '0';
})
}
})
}
}
})
У меня есть новая директива началась (ниже), но свойства объекта is
и prop
объекта HtmlElement фактически не существуют. Как я могу получить/установить свойство checked
элемента ввода, на котором я отбрасываю этот атрибут? Я также думаю, что эта директива предоставляет статус макета через атрибут Output, поэтому родительский компонент может соответствующим образом реагировать.
Может ли кто-нибудь вести меня немного? Я на правильном пути? Благодаря!
Новая директива:
import { Directive, ElementRef, Output, EventEmitter, OnInit } from '@angular/core';
import { LocalStorage } from "../common";
@Directive({
selector: '[change-layout]',
host: {
'(change)': 'onChange()'
}
})
export class ChangeLayoutDirective implements OnInit {
private el: HTMLElement;
@LocalStorage() public layoutStatus: Number = 0;
@Output() layoutStatusChange = new EventEmitter();
constructor(el: ElementRef) {
this.el = el.nativeElement;
}
ngOnInit() {
this.el.prop('checked', false);
if(this.layoutStatus === 1) {
this.el.prop('checked', true);
}
}
onChange() { this.toggleLayout(); }
private toggleLayout() {
if(this.el.is(':checked')) {
this.layoutStatus = 1;
}
else {
this.layoutStatus = 0;
}
this.layoutStatusChange.emit({
value: this.layoutStatus
});
}
}
спасибо. Я знаю, что я читал о HostBindings где-то в основном учебнике или руководстве разработчика, но он не утонул. [Это] (https://angular.io/docs/ts/latest/api/core/HostBinding-var.html) и [this] (https://angular.io/docs/ts/latest/api/core/index/HostListener-var.html) являются соответствующими api docs для всех, кто интересуется. – Stuart