Вы можете использовать ViewChild для получения первого элемента или директивы, соответствующей селектору из представления DOM. Если вид DOM изменения и новый дочерний элемент соответствует селектору, свойство будет обновлено.
component.ts
@ViewChild('addmanager') ref:ElementRef;
onChange($e){
console.log($e);
//set the input element clear
this.ref.itemsList['_selected']=[];
}
Посмотрите пример здесь: https://stackblitz.com/edit/ng-select-q46vpr
Позвольте мне ответить на мой вопрос!
Похоже, что использование ListElement в ListModel - это особенность языка .
Как указано в в Руководстве по ListElement :
Элементы списка определены , как и другие элементы QML , за исключением того, что они содержат набор определений ролей вместо свойств. , Использование того же синтаксиса , что и для определения свойств ...
blockquote>В соответствии с этим, оказывается, что синтаксис ListElement {roleName: roleValue} в ListModel не будет определять экземпляр типа ListElement, но будет элементом List или список пункт из ListModel.
Я использовал следующие коды, чтобы доказать свою точку зрения.
QML:
import QtQuick 2.12 import QtQuick.Window 2.12 Window { visible: true width: 640 height: 480 title: qsTr("Hello World") ListModel { objectName: "model" ListElement { objectName: "element" name: "abc" } } }
CPP:
#include <QAbstractListModel> #include <QGuiApplication> #include <QQmlApplicationEngine> #include <QtDebug> int main(int argc, char* argv[]) { QGuiApplication app(argc, argv); QQmlApplicationEngine engine; engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); if (engine.rootObjects().isEmpty()) return -1; for(const auto &rootObject:engine.rootObjects()) { auto model = rootObject->findChild<QAbstractListModel*>("model"); qDebug() << model; qDebug() << rootObject->findChild<QObject*>("element"); if(model) { qDebug() << model->roleNames(); } } return app.exec(); }
Выходные сообщения:
QML debugging is enabled. Only use this in a safe environment. QQmlListModel(0x26c4e7c1500, name = "model") QObject(0x0) QHash((1, "objectName")(0, "name"))
Видели? ListModel создает объект с именем model. Принимая во внимание, что ListElement не создал объект с именем element, но сделал две роли для объекта модели.
Как следует из текста ошибки, если вы хотите определить свойства в C ++, вам нужно объявить его с помощью макроса Q_PROPERTY
и предоставить методы для него ( http://doc.qt.io/qt-5/ properties.html ).
Вы также можете определить свойства в QML:
Test {
property string name: "xxx"
}
ListElement
name
и age
не произвольные свойства, а роли модели ( ссылка ).