Я думаю, что угловой рекомендуемый способ делать обратные вызовы (например, ngclick, например), чтобы использовать метод связывания типа: &
Вот пример plunkr: https://plnkr.co/edit/nySL4OoMpJPkGXX8j78U?p=preview
Примечание. Эта часть определяет тип привязки метода, а функция internalChange выполняет w Любое угловое выражение предоставляется родителем/вызывающим.
bindings: {
valueChanged: '&?'
},
controller: function() {
this.$onInit = function() {
this.value = 'initial value';
};
this.internalChange = function() {
if (this.valueChanged) {
this.valueChanged({ $value: this.value});
}
};
}
А вот здесь два способа использования выражений, обратите внимание на значение $, определенное компонентом.
<my-comp data-value-changed="$ctrl.someFunction($value)"></my-comp> <br
<my-comp data-value-changed="$ctrl.someProperty = 'Bla: ' + $value"></my-comp>
Я попытался установить его, чтобы показать множество вещей.
Связывание метода принимает угловое выражение. У меня есть 2 примера, один из которых вызывает функцию на родительском контроллере, а другая - свойство
Это выражение выполняется с областью родительского/вызывающего (то есть: имеет доступ к свойствам родительского контроллера, функциям и т. Д.). .)
компонент является тот, кто вызывает его, выполнив имя связывания как функции
компонент может предоставить карту ключ/значение, где ключ является именем свойства, которые могут быть использованы (значение $ в моем примере)
Это хорошее решение, если вы в порядке, когда компонент выполняет «push» обновления родительскому. Если, например, вы только хотели получить данные от компонента в определенное время (возможно, из-за ограничений времени или памяти), то для этой проблемы существует много других решений.
Надеюсь, это поможет!
Интересно.Так вы говорите, что компоненты никогда не должны использовать ngModel для вывода результатов? Я не вижу, что это сильно отличается от двухсторонней привязки, которая разрешена. (хотя да 2-сторонняя привязка также должна использоваться экономно) – Brian
Ну, я цитирую документы. Но, правда, вы можете изменить объект, используя двустороннюю привязку в компоненте. Но вы не можете заменить объект. И, как представляется, документы подразумевают, что это не был предназначен для использования компонентов. Кроме того, если вы действительно хотите это сделать, просто используйте директиву, и вы точно знаете, что получаете. – Toddsden
Итак, при создании элементов формы невозможно сделать их как компоненты, и они должны быть созданы как простые директивы? Я чувствую, что это своего рода компонент компонентов, чтобы иметь возможность создавать элементы, которые [похожими на ... Веб-компоненты ». И как таковой, нет необходимости создавать директивы для обеспечения интерфейса для данных элемента формы. Компоненты должны иметь возможность экспортировать свои данные каким-то образом. О, хорошо ... – Incinirate