У меня есть Угловое 1 приложение, которое работает с простой contentEditable
директивы, которые могут быть использованы, как это в шаблонах:Изменение свойства компонента из директивы в Angular2
<span contenteditable="true" ng-model="model.property" placeholder="Something">
Редактирование элемента уволит $setViewValue(element.html()
и работал ожидается.
Я хотел бы сделать что-то в Angular2 с аналогичным сжатым синтаксисом шаблонов. В идеале я хотел бы шаблон, чтобы выглядеть следующим образом:
<span contentEditable="true" [(myProperty)]="name"></span>
где «имя» является свойство на компоненте и есть директива обновить компонент при изменении. Я чувствую, что я близко с этим (Plunker Link):
//our root app component
import {Component, Input, Output Directive, ElementRef, Renderer, OnInit} from 'angular2/core'
@Directive({
selector: '[contentEditable]',
host: {
'(blur)': 'update($event)'
}
})
export class contentEditableDirective implements OnInit {
@Input() myProperty;
constructor(private el: ElementRef, private renderer: Renderer){}
update(event){
this.myProperty = this.el.nativeElement.innerText;
}
ngOnInit(){
this.el.nativeElement.innerText = this.myProperty;
}
}
Эта идея работает, если я передать объект как {name: "someName"}
, но если просто передать свойство похоже, это передавая значение, но не ссылки и т.д. привязка не возвращается к компоненту. Есть ли способ сделать это, который по-прежнему позволит синтаксис шаблона, который не является подробным, но все же позволяет легко повторно использовать директиву.
Я добавлю, что могу сделать это, если я добавлю 2 ввода в директиву и передаю как имя объекта, так и имя свойства как отдельные входы.Мой шаблон будет выглядеть следующим образом: '' Тогда я могу манипулировать 'myobject [property]' из директивы. Однако предпочел бы более чистый способ. –