Angular - невозможно получить данные родительского компонента

NSString* text=@"Hello world";
NSURL *myWebsite = [NSURL URLWithString:@"http://www.website.com/"];
//  UIImage * myImage =[UIImage imageNamed:@"myImage.png"];
NSArray* sharedObjects=@[text,myWebsite];
UIActivityViewController * activityViewController=[[UIActivityViewController alloc]initWithActivityItems:sharedObjects applicationActivities:nil];

activityViewController.popoverPresentationController.sourceView = self.view;
[self presentViewController:activityViewController animated:YES completion:nil];
0
задан user2013 3 March 2019 в 09:21
поделиться

3 ответа

Вы можете использовать функцию arrow, чтобы использовать информацию родительского компонента. Вы можете попробовать как указано ниже.

updateUnreadNotification = () => {
   // by using arrow function you can get notificationService information
   console.log( this.notificationService );
}

Надеюсь, что ваша проблема будет решена этим.

0
ответ дан sabbir 3 March 2019 в 09:21
поделиться

Вы должны использовать @Input() для передачи значений от parent до child и @Output() для передачи значений от child до parent ]. [1 110]

Дочерний HTML:

<button type="button" class="icon-button" (click)="update()">
</button>

Дочерний компонент:

export class NotificationMenuComponent implements OnInit {
    @Output() updateUnread = new EventEmitter<string>();

    update() {
        this.updateUnread.emit("I am working man!");
    }
}

Родительский HTML:

<notification-menu (updateUnread)= "unreadNotification($event)"></notification-menu>

Родительский компонент:

export class AppComponent implements OnInit {
    constructor( private notificationService: NotificationService ) {}

    unreadNotification(dataFromChild: string) {
        console.log(dataFromChild);
    }
}
0
ответ дан nimeresam 3 March 2019 в 09:21
поделиться

Ответ @nimeresam - хороший совет - использование @Output - это нелепый способ для достижения этой цели.

Однако стоит отметить, что причина, по которой ваше оригинальное решение не работает, связана с тем, как javascript обрабатывает контекст this.

Запись (click)="updateUnread()" равносильна произнесению this.updateUnread() с этим значением NotificationMenuComponent - так как служба извещения не существует в NotificationMenuComponent, вы получите неопределенную ошибку.

Чтобы использовать контекст родительского компонента, вам необходимо связать контекст с функцией updateUnread перед передачей его в дочерний компонент.

Это может быть достигнуто либо путем преобразования функции в функцию стрелки, либо с помощью Function.bind

См .:

https://developer.mozilla.org/ ru-ru / docs / Web / JavaScript / Справочник / Функции / Arrow_functions

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects / Function / bind

Обычно хорошей идеей является включение опции машинописи для --noImplicitThis, чтобы помочь отлавливать эти ошибки (хотя и не уверены, обнаружит ли она это в этом случае)

0
ответ дан Michael 3 March 2019 в 09:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: