Angular 用于遗留旧值的动态NGF
我试图在Angular 5中实现一些收藏夹系统,但每次我从列表中添加或删除收藏夹时,显示的列表也会保留旧列表。也就是说,如果我从收藏夹列表[a,b,c]开始并添加一个新的d,那么我将以列表[a,b,c,d,a,b,c]结束。例如,这里只有一个收藏夹: 在这里,我尝试添加一个新的: 效果是:如果我添加了n个新收藏夹,我将得到n份列表副本。这纯粹是一种动态效果,就像我只是刷新页面一样,列表正常显示。问题似乎也不是来自favorites数组,因为它似乎从来没有重复的条目 所涉及的基本代码是在Smart中使用的侧边栏,为收藏列表的目的而修改。涉及的组件为AppSidebarNavComponent:Angular 用于遗留旧值的动态NGF,angular,Angular,我试图在Angular 5中实现一些收藏夹系统,但每次我从列表中添加或删除收藏夹时,显示的列表也会保留旧列表。也就是说,如果我从收藏夹列表[a,b,c]开始并添加一个新的d,那么我将以列表[a,b,c,d,a,b,c]结束。例如,这里只有一个收藏夹: 在这里,我尝试添加一个新的: 效果是:如果我添加了n个新收藏夹,我将得到n份列表副本。这纯粹是一种动态效果,就像我只是刷新页面一样,列表正常显示。问题似乎也不是来自favorites数组,因为它似乎从来没有重复的条目 所涉及的基本代码是在Sma
export class AppSidebarNavComponent implements OnInit, AfterViewInit
{
ngAfterViewInit()
{
if(this.projectService.fav === null)
{
let usersub = this.userService.userObs.subscribe(user =>
{
let favs = [];
this.projectService.loadFavorites(user.id);
let favsub = this.projectService.favorites.subscribe(data =>
{
let favs = [];
for(let fav of data)
{
let name = fav.Program;
let url = '/geometry/' + fav.projectid;
let child = {name: name, url: url, icon: 'icon-star', fav: true};
favs.push(child);
}
if(this.navigation[1].hasOwnProperty("children"))
{
this.navigation[1]["children"] = favs;
}
});
});
}
}
}
@Component({
selector: 'app-sidebar-nav-item',
template: `
<li>
<app-sidebar-nav-link [link]='item'></app-sidebar-nav-link>
</li>
<ng-template #dropdown>
<li>
<app-sidebar-nav-dropdown [link]='item'></app-sidebar-nav-dropdown>
</li>
</ng-template>
`
})
组件AppSidebarNavItemComponent:
export class AppSidebarNavComponent implements OnInit, AfterViewInit
{
ngAfterViewInit()
{
if(this.projectService.fav === null)
{
let usersub = this.userService.userObs.subscribe(user =>
{
let favs = [];
this.projectService.loadFavorites(user.id);
let favsub = this.projectService.favorites.subscribe(data =>
{
let favs = [];
for(let fav of data)
{
let name = fav.Program;
let url = '/geometry/' + fav.projectid;
let child = {name: name, url: url, icon: 'icon-star', fav: true};
favs.push(child);
}
if(this.navigation[1].hasOwnProperty("children"))
{
this.navigation[1]["children"] = favs;
}
});
});
}
}
}
@Component({
selector: 'app-sidebar-nav-item',
template: `
<li>
<app-sidebar-nav-link [link]='item'></app-sidebar-nav-link>
</li>
<ng-template #dropdown>
<li>
<app-sidebar-nav-dropdown [link]='item'></app-sidebar-nav-dropdown>
</li>
</ng-template>
`
})
@组件({
选择器:“应用程序侧栏导航项”,
模板:`
`
})
导出类AppSidebarNavLinkComponent{
公共删除FAV(链接)
{
this.projectService.removeFavorite(this.userService.user.id,link.name)。订阅(数据=>
{
this.projectService.loadFavorites(this.userService.user.id,true);
});
}
}
和AppSidebarNavDropdownComponent
@Component({
template: `
<a>
{{ link.name }}
</a>
<ul>
<app-sidebar-nav-item *ngFor="let child of link.children"
[item]='child'></app-sidebar-nav-item>
</ul>
`
})
@组件({
模板:`
{{link.name}
`
})
我尝试在加载收藏夹后完成订阅,但这只会使列表不再更新。我试图手动删除列表中的条目,但Angular似乎不喜欢它,当它试图插入收藏夹时,它崩溃了。没有其他与*ngFor相关的组件显示这种行为,我不确定是什么导致了这种情况。未来的访客您好。如果您在这个问题上也有问题,那么解决方案似乎是,显然,使用动态组件而不是直接使用HTML代码似乎是一个问题。替换
<app-sidebar-nav-item *ngFor="let child of link.children"
[item]='child'></app-sidebar-nav-item>
与
...
div包含应用程序侧栏导航项的适当内容的地方似乎起到了作用。来自未来的访客您好。如果您在这个问题上也有问题,那么解决方案似乎是,显然,使用动态组件而不是直接使用HTML代码似乎是一个问题。替换
<app-sidebar-nav-item *ngFor="let child of link.children"
[item]='child'></app-sidebar-nav-item>
与
...
div中包含应用程序侧栏导航项的适当内容似乎起到了作用。我参与了这个线程,因为我刚刚遇到了类似的问题,所以我想至少在使用Clarity Design系统时,有人可以从中受益 我正在使用显示搜索结果。虽然每次搜索后结果数组都会正确更新,但结果会在视图中不断累积,使用*ngFor或Clarity自定义指令*CLRDGEMS 我不知道问题的根源是什么,但通过更新项目的依赖关系成功地解决了问题;特别是:
Name Version Command to update
--------------------------------------------------------------------
@angular/cli 9.0.3 -> 9.0.4 ng update @angular/cli
@angular/core 9.0.2 -> 9.0.4 ng update @angular/core
@clr/angular 2.3.8 -> 3.0.0 ng update @clr/angular
我对这篇文章的贡献是因为我刚刚遇到了一个类似的问题,所以我想有人可以从中受益,至少如果使用Clarity设计系统的话 我正在使用显示搜索结果。虽然每次搜索后结果数组都会正确更新,但结果会在视图中不断累积,使用*ngFor或Clarity自定义指令*CLRDGEMS 我不知道问题的根源是什么,但通过更新项目的依赖关系成功地解决了问题;特别是:
Name Version Command to update
--------------------------------------------------------------------
@angular/cli 9.0.3 -> 9.0.4 ng update @angular/cli
@angular/core 9.0.2 -> 9.0.4 ng update @angular/core
@clr/angular 2.3.8 -> 3.0.0 ng update @clr/angular
请提供最少的代码来重现/识别您的问题,而不是您的整个代码,因为阅读起来非常乏味。现在,它应该更可读一些,希望仍然能够识别问题。我看到了删除fav函数,但我没有看到添加fav函数,这正常吗?Stackblitz plz-TDLR;添加收藏夹功能是另一个组件使用的服务的一部分。我应该添加它吗?请提供最少的代码来重现/识别您的问题,而不是您的整个代码,因为阅读起来非常乏味。现在,它应该更可读一点,希望仍然能够识别问题。我看到了删除fav函数,但我没有看到添加fav函数,这正常吗?Stackblitz plz-TDLR;添加收藏夹功能是另一个组件使用的服务的一部分。我应该加上它吗?我只是在一点尝试和错误之后发现了相同的问题和解决方案。然后我找到了你的答案。我也在用angular 5。由于子模板
app侧边栏导航项
在其他地方使用,因此不能直接嵌入模板。也许是angular 5特有的一个bug?升级到angular 6目前对我们来说也是不可能的。您是否找到了一个不同的解决方案来修复子组件的删除?我只是在经过一点尝试和错误后发现了相同的问题和解决方案。然后我找到了你的答案。我也在用angular 5。由于子模板app侧边栏导航项
在其他地方使用,因此不能直接嵌入模板。也许是angular 5特有的一个bug?升级到angular 6目前对我们来说也是不可能的。您是否找到了修复子组件删除的其他解决方案?