所以我在Angular2中有兩個組件。當用戶單擊component1中的按鈕時,我有一種方法將sharedservice
中的數據存儲到變量中。該變量在組件2 ngOnInit()
中訪問。然而,由於它不等待點擊事件,所以初始化爲ngOnInit()
中的變量未定義。如何等待angular2中的用戶點擊事件?
總而言之,我該如何讓angular2 component2等待component1中的單擊事件?
在JavaScript中,我們可以使用點擊事件偵聽器輕鬆地做到這一點,或者有一個回調函數,但我不知道如何在角度上實現相同的想法。
請您分享您的想法。
這是我到目前爲止有:
modules.component.html
<tr *ngFor="let module of modules" #moduleObject>
<a class="test" (click)="module._clicked = !module._clicked"></a>
<ul class="dropdown-menu" role="menu" [ngStyle]="{'display': module._clicked ? 'block' : 'none'}" >
<li><a (click)="_showDialogue =! _showDialogue; _getModuleCode(module)"><img src="../../assets/img/pencil.svg" alt="" width="13px">Edit Module</a></li>
</ul>
</tr>
我會從modules.component.ts刪除不必要的代碼,因爲它只會吹在這裏 modules.component.ts
一切
import {SharedService} from "../shared/shared.service";
import {DepartmentsService} from "./departments.service";
import {ActivatedRoute, Params} from "@angular/router";
import {Module} from "../dashboard/Module";
@Component({
selector: 'app-modules',
templateUrl: './modules.component.html',
providers: [DepartmentsService]
})
export class ModulesComponent implements OnInit {
service;
modules: Module[];
constructor(
private activatedRoute: ActivatedRoute,
service : SharedService,
private departmentsService: DepartmentsService,
route: ActivatedRoute) {
route.params.subscribe(p => {this.department = p['dname']; });
this.service = service;
}
_getModuleCode(moduleObject) {
this.departmentsService.moduleObject = moduleObject;
}
ngOnInit() { }
}
departments.service.ts
// assume necessary imports above
@Injectable()
export class DepartmentsService {
public _facultyName :string;
public _departmentName :string;
public moduleObject:Module;
constructor() {}
}
然後我打電話moduleObject變量從這個組件: edit-forms.component.html
import {Module} from "./Module";
import {DepartmentsService} from "../components/departments.service";
//Change
@Component({
selector: 'enable-module-form',
templateUrl: './edit-forms.component.html',
providers:[ModuleService]
})
export class EnableModFormComponent {
constructor(
private moduleService: ModuleService,
private departmentService: DepartmentsService
) { }
ngOnInit(){
console.log(this.departmentService.moduleObject);
}
}
你會使用'Observable'。你可以發佈你的場景的一些代碼,所以我們可以給你一個更現實的答案? – acdcjunior
肯定的事情。請檢查我的最新編輯@acdcjunior – DingDong
是否有運氣? @acdcjunior – DingDong