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];
Вы можете использовать функцию arrow
, чтобы использовать информацию родительского компонента. Вы можете попробовать как указано ниже.
updateUnreadNotification = () => {
// by using arrow function you can get notificationService information
console.log( this.notificationService );
}
Надеюсь, что ваша проблема будет решена этим.
Вы должны использовать @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);
}
}
Ответ @nimeresam - хороший совет - использование @Output
- это нелепый способ для достижения этой цели.
Однако стоит отметить, что причина, по которой ваше оригинальное решение не работает, связана с тем, как javascript обрабатывает контекст this
.
Запись (click)="updateUnread()"
равносильна произнесению this.updateUnread()
с этим значением NotificationMenuComponent
- так как служба извещения не существует в NotificationMenuComponent, вы получите неопределенную ошибку.
Чтобы использовать контекст родительского компонента, вам необходимо связать контекст с функцией updateUnread
перед передачей его в дочерний компонент.
Это может быть достигнуто либо путем преобразования функции в функцию стрелки, либо с помощью Function.bind
См .:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects / Function / bind
Обычно хорошей идеей является включение опции машинописи для --noImplicitThis
, чтобы помочь отлавливать эти ошибки (хотя и не уверены, обнаружит ли она это в этом случае)