Я занимаюсь разработкой приложения Angular 8 и мне нужна библиотека для отображения 3D-моделей (JS + WASM). Для взаимодействия между Моей Таблицей Дерева и 3D-моделью мне нужно зарегистрировать наблюдателя в этой библиотеке.
Данный пример кода для регистрации наблюдателя (для этой библиотеки) написан на AngularJS:
Регистрация:
$scope.RegisterSelectionObserver = function() {
if ($scope.selectionObserver == null) {
$scope.selectionObserver = new $scope.MySelectionClass();
$scope.session.RegisterSelectionObserver($scope.selectionObserver);
}
}
Определение класса:
$scope.MySelectionClass = Module.SelectionEvents.extend("SelectionEvents", {
__construct: function() {
this.__parent.__construct.call(this);
this.SetEventsFilter(Module.EVENTS_PICKS | Module.EVENTS_SELECTION);
},
OnSelectionBegin: function () {
if ($scope.webglSettings.selectionLogging === 'YES') {
console.log("OnSelectionBegin");
}
},
});
Мое усыновление: Я пытался создатьКласс с его конструктором и передать его на регистрацию наблюдателя, с ошибкой.
Мой пользовательский класс:
export class ExtSelectionEvents{
constructor(){
}
OnSelectionBegin(){
console.log('OnSelectionBegin');
}
}
Моя регистрация:
const extSelectionEventsInstance = new ExtSelectionEvents();
session.RegisterSelectionObserver(extSelectionEventsInstance);
Ошибка:
zone.js: 703 Необработанный отказ от обещания: Невозможно передать «[объект объекта]» в качестве объекта SelectionEvents *;Зона:;Задача: Promise.then;Значение: BindingError {name: "BindingError", сообщение: "Невозможно передать" [объект объекта] "в качестве SelectionEvents *", стек: "BindingError: Невозможно передать" [объект объекта] "в качестве S… eferences (http://localhost:4200/scripts.js:181:13)"}message: «Невозможно передать« [объект объекта] »в качестве SelectionEvents *» имя: стек «BindingError»: «BindingError: Невозможно передать« [объект объекта] »в качестве SelectionEvents * ↵
в BindingError. (http://localhost:4200/assets/js/libthingview_wasm.js:1:117337)↵
в новом BindingError (eval в createNamedFunction (http://localhost:4200/assets/js/libthingview_wasm.js:1:116224),: 4: 34) ↵ в throwBindingError (http://localhost:4200/assets/js/libthingview_wasm.js:1:118918)↵ в RegisteredPointer.nonConstNoSmartPtrRawPointerToWireType [as toWireType] 1046 * в сеансе $ RegisterSelectionObserver [в качестве RegisterSelectionObserver] (eval at new_ (http://localhost:4200/assets/js/libthingview_wasm.js:1:142970),: 8: 26) ↵ в OverviewComponent.push ../ src / app / views / mechportal / Overview/view.component.ts. OverviewComponent.callback (http://localhost:4200/views-mechportal-overview-overview-module.js:18109:17)↵ в http://localhost:4200/scripts.js:18:31↵ в http://localhost:4200/scripts.js:182:17↵ в _loadPreferences (http://localhost:4200/scripts.js:304:9)↵ в Object.LoadPreferences (http://localhost:4200/scripts.js:181:13)"proto: Ошибка BindingError: Cannot pass "[объект объекта] "как SelectionEvents * в BindingError. (http://localhost:4200/assets/js/libthingview_wasm.js:1:117337) при новой ошибке BindingError (eval at createNamedFunction (http://localhost:4200/assets/js/libthingview_wasm.js:1:116224),: 4: 34)
Резюме:
TheБиблиотека ожидает анонимную функцию для OnSelectionBegin, потому что она создает ее именованную функцию.
Что происходит в MySelectionClass и как я могу перевести определение класса AngularJS с его анонимной функцией для работы с Angular 8 /библиотека