В этом коде есть несколько ошибок, которые могут быть неправильными.
public _contact: ObservableArray<string>;
this._contact = new ObservableArray([
{name:_contactName, phone:_contactPhone}
]);
/* { name: string, phone: string } is not of type 'string' */
Кроме того, обратным вызовам API, которые обновляют элементы пользовательского интерфейса, обычно нравится, когда NgZone
работает внутри.
Затем, чтобы сделать дела немного более грязными, вы используете отключенный function
, который технически не должен ссылаться ни на одного из ваших this
членов.
Попробуйте это:
class Contact: {
constructor(public name: string, public phone: string) { }
}
@Component({ ... })
export class YourComponent {
public contact$: Subject<Contact | null>;
constructor(private zone: NgZone, ...) {
this.contact$ = new BehaviourSubject<Contact | null>(null);
}
public pickContact() {
Permissions. ...
.then(() => {
contacts.getContact().then((args) => {
...
this.zone.run(() => {
this.contact$.next(new Contact(contactName, contactPhone));
}
});
});
}
}
Чтобы улучшить это, вы, вероятно, захотите использовать несколько WeakRef
, чтобы убедиться, что вы не удерживаете ссылки на объекты бесконечно (вызывая утечки памяти) во время ожидания вызовов API.