我有一个看起来像这样的人组件(非常简化):
person.component.html
export class Person {
constructor() { }
more(id: any){
let response = `more info <button class='btn btn-primary btn-sm' (click)="changeCurrent()">`;
$('#' + id + '_info').html(response);
}
change() {
console.log('hello world', this);
}
}
person.component.ts
export class AllVetsComponent implements OnInit {
vets: any = [];
patients: any = [];
displayPatients: any = [];
patientsRetrieved: boolean = false;
constructor(private http: Httppatient) { }
ngOnInit() {
// hit a web api, parse the data into this.vets and this.patients
}
getAllPatients(vetID: number): any[] {
// hit web api and get just the patients for the vet id
}
getPatients(vetID: number): void {
this.patientsRetrieved = false;
this.displayPatients[vetID] = [];
this.displayPatients[vetID] = getAllPatients(vetID);
this.patientsRetrieved = true;
$('#' + vetID + '_patients').toggle(500); // yes, still jQuery, but used for animations
}
showPatients(): boolean{
return this.patientsRetrieved;
}
changeStatus(patientID: number): void{
// find the patient with that id and toggle the currentPatient value
// post the change back to the api so it can go in the db
}
}
当我点击更多按钮时,更多(id)会触发,并显示有关此人的更多信息。这样就可以了。
但是当我点击更改按钮时,更改()永远不会触发。我知道有更好的方法和jquery需要去,但我还没有找到一个例子。
谢谢,
嘿。我知道jQuery是错误的方式,但有时我会感到沮丧,只是想让某些东西起作用。
邓肯给了我最终想出的东西的线索。我认为它接近Angular的思维方式,所以我在这里添加它。更好地描述了我正在玩的例子:兽医诊所有多名兽医,每名兽医都有多名患者。网页显示了一个兽医列表。点击兽医名称会显示患者列表,患者姓名旁边有一个按钮可切换患者的状态,当前/不当前。
全vets.component.ts
<div class='card' *ngFor='let vet of vets'>
<div class='card-header' role='tab' [id]='vet?.vet_id'>
<a (click)='getAllPatients(vet?.vet_id)'
class="collapsed"
data-toggle="collapse"
(href)='"#" + vet?.vet_id'
aria-expanded="false"
>
{{vet?.vet_first_name}} {{vet?.vet_last_name}}
</a>
</div>
<div [id]='vet?.vet_id + "_patients"'
class="collapse hide" role="tabpanel"
[attr.aria-labelledby]='vet?.vet_id' [attr.data-parent]='"#" + vet?.vet_id'>
<div class="card-body patient-display">
<div class='container-fluid'>
<div class='row patient-listing patient-listing-header'>
<span class='patient-name col'>Name</span>
<span class='current-patient col'>Change Status</span>
</div>
<ng-template ngIf='showPatients()'>
<div class='row patient-listing' *ngFor='let patient of patients'>
<span class='patient-name col ' [ngClass]="{'currentpatient': patient.current_patient === 1, 'notpatient': patient.current_patient !== 1}">
{{patient?.name}}
</span>
<span class='patient-owner col'>
{{patient?.owner}}
</span>
<button class='btn btn-primary btn-sm' (click)='changeStatus(patient?.name)'>
<span *ngIf='patient.current_patient'>
Current
</span>
<span *ngIf='!patient.current_patient'>
Not Current
</span>
</button>
</span>
</div>
</ng-template>
</div>
</div>
</div>
</div>
全vets.component.html
O(N^2)
我删除了无关的细节并更改了名字以保护无辜者。
这对我有用。唯一的非角度部分是显示卡体的jquery。我可以使用angular来切换类,但我想添加延迟,所以它不是突然的。可能还有一种方法可以做到这一点;我还没有学会它。单击按钮可以正确更新按钮文本并更改患者姓名的样式,以及我所追求的一般行为。
TODO:
谢谢Duncan!
答案 0 :(得分:2)
您需要使用angular来更新DOM。使用jQuery插入的HTML不会被编译为使用任何角度指令。
<div *ngfor='let current of users'>
<p>{{current?.name}} <a (click)='more(current?.id)'>Click for more</a>
<span *ngIf="wantMore[current?.id]">
more info
<button class='btn btn-primary btn-sm' (click)="changeCurrent()">
</span>
</p>
</div>
然后在你的代码中:
export class Person {
public wantMore = {};
constructor() { }
more(id: any){
this.wantMore[id] = true;
}
changeCurrent() {
console.log('hello world', this);
}
}
答案 1 :(得分:-1)
试试这个:
var minutes = Math.floor(o / 60);
此外,我看到你调用了 changeCurrent 函数,但调用了你的函数更改 ......