从任何其他组件更新滑块组件数据

Posted

技术标签:

【中文标题】从任何其他组件更新滑块组件数据【英文标题】:Update slider component data from any other component 【发布时间】:2020-03-05 08:46:01 【问题描述】:

我是 Angular 的新手,我有一个滑块组件,但我将在 2 个页面(主页、新闻)中使用它,我正在使用 ViewChild 从父级(主页)调用它并想要添加新图像和每张幻灯片的标题,两个页面(主页,新闻)都有相同的滑块组件,但标题和图像不同,我只能在主页中显示滑块,但它不会用我需要的数据更新数据,我正在使用 slick轮播,有什么帮助吗?

主页(父):

@ViewChild(SliderComponent, static:false) slickModal: SliderComponent;

  ngAfterViewInit()    

    this.slickModal.slides = [
      img: "img-slide-01.jpg", title: "Title 1", description: "Description 1",
      img: "img-slide-02.jpg", title: "Title 2", description: "Description 2"
    ];
  

滑块组件:

slides = [
    img: "image.jpg", title: "title", description: "description",
    img: "image.jpg", title: "title", description: "description"
  ];

  slideConfig = 
    "dots": true,
    "arrows": false,
    "slidesToShow": 1, 
    "slidesToScroll": 1
  ;

滑块html

<ngx-slick-carousel class="slider sliderHome" #slickModal="slick-carousel" [config]="slideConfig">
    <div ngxSlickItem *ngFor="let slide of slides" class="slide" [ngStyle]="background: 'url(' + slide.img + ')'">
        <div class="container">
            <h1> slide.title </h1>
            <p> slide.description </p>
            <a href="#" class="btn">Learn More</a>
        </div>
    </div>
</ngx-slick-carousel>

我希望在任何页面上使用这个 slick 组件并根据您所在的页面更新幻灯片内容。

【问题讨论】:

【参考方案1】:

与其使用@ViewChild,不如直接提供值作为输入:

export class SliderComponent 

    @Input() slides;

    slideConfig = 
        "dots": true,
        "arrows": false,
        "slidesToShow": 1,
        "slidesToScroll": 1
    ;

在主页和 news.component.ts 文件中只定义幻灯片并通过您的@Input() 传递它

@Component(
    selector: 'home-or-news-page',
    template: `<app-slider [slides]="slides"></app-slider>`
)
export class HomePageOrNewsComponent 
    public slides = [
         img: "image.jpg", title: "title", description: "description" ,
         img: "image.jpg", title: "title", description: "description" 
    ];

【讨论】:

很高兴它有帮助。请标记为答案,以便将来对其他人有所帮助。【参考方案2】:

使用 rxjs Subject 来实现这一点。您可以使用 BehaviorSubject 检测应用程序中任何位置的更改并进行相应更新。

您可以查看此Medium Article 以了解最简单的用例。

【讨论】:

以上是关于从任何其他组件更新滑块组件数据的主要内容,如果未能解决你的问题,请参考以下文章

闪光范围滑块组件

在不同组件中使用相同的对象数组,如果对一个对象进行任何更新,将在角度 8 中显示其他组件中的更新

将状态从其他组件更新到主组件

从子组件更新父 React 组件

组件不会从父angularjs接收更新

React useState 更新不是重新渲染组件