javascript - 通过将数据存储在类变量中来间接更改 UI 不起作用

标签 javascript angular typescript

如果我想对我的用户界面进行任何更改,那么我会直接传递数据,例如;

在 HTML 模板中

<li *ngFor="let post of posts;let i = index;">
  {{i+1}}) {{post.name}}
<button (click)="editCategory(post)" class="btn btn-danger btn-sm">Edit</button>
</li>

在组件 TS 中

editCategory(post){
 post.name="Something";
}

这也会反射(reflect)在用户界面中并且工作正常!
但是当我尝试间接执行此操作时,不会发生如下情况:

在 HTML 模板中

 <li *ngFor="let post of posts;let i = index;">
{{i+1}}) {{post.name}}
<button (click)="deleteCategory(post); modal1.show();" class="btn btn-danger btn-sm">Edit</button>
</li>
<div #modal1="bs-modal">
<button (click)="finallyDeleteCategory(); modal1.show();" class="btn btn-danger btn-sm">Edit</button> //making changes through this button
</div>

在组件 TS 中

deleteCategory(post){
 this.savedPost=post;
}
finallyDeleteCategory(){
 this.savedPost.name="deleted"; //this Doesn't work
}

虽然我将数据保存在类变量中,然后在变量中进行更改,但它不会反射(reflect)在 UI 中。

疑问:

  1. 如何将 Post 的引用保存在类变量中?
  2. 这是间接进行更改的正确方法还是我已经在 html 本身中传递了数据?

任何帮助将非常感谢!

最佳答案

由于finallyDeleteCategory位于循环上下文之外,因此您不能仅传递post的引用并更改其名称,因为它不存在。

this.savedPost.name="已删除";不起作用,因为被循环的元素是 posts 数组的一部分。您可以做的就是保存帖子索引 i 而不是帖子对象并在方法中

(click)="editCategory(i)"

deleteCategory(loopindex){
 this.index=loopindex
}

finallyDeleteCategory 您从数组中检索帖子,然后直接在那里更改它。

finallyDeleteCategory(){
  posts[this.index].name="deleted";
}

关于javascript - 通过将数据存储在类变量中来间接更改 UI 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48359011/

相关文章:

javascript - 验证该字符串是正则表达式模式的开头

javascript - 中心动态 Angular 形式

Angular 2.1 无法设置基本提供程序,因为它已经被调用(…)

node.js - 平均堆栈 : Refreshing or entering a direct URL lead to 'Cannot GET/' ?

javascript - Angular 5 上的数组问题

angular - 获取组件中的路由参数

javascript - 将数组元素写入不同的文件

javascript - Node.js 使用 if 和异步调用控制流程

javascript - 未捕获的 TypeError : $(. ..).find(...).hasClass(...).show 不是函数

angular - 如何在url路径中没有附加斜杠的情况下实现angular2嵌套组件路由