gpt4 book ai didi

css - Angular 2 : Detect changes in browser width and update model

转载 作者:太空狗 更新时间:2023-10-29 18:03:03 24 4
gpt4 key购买 nike

在我的 Angular 2 应用程序中,我根据浏览器窗口宽度更改样式。这是一个示例 (SCSS):

.content{
/*styles for narrow screens*/
@media (max-width: 750px){
background-color:beige;
}
/*styles for medium screens*/
@media (min-width: 751px) and (max-width: 1200px) {
background-color:red;
}
/*styles for wide screens*/
@media (min-width: 1201px) {
background-color:brown;
}
}

这使我的 UI 响应迅速。我希望我的 Angular 组件知道哪个宽度间隔是当前的:

/* Returns which of the CSS width intervals is current*/
getWidthRange(){
let pixelWidth = ...; //what goes here?

if(pixelWidth < 251) return "small";
if(pixelWidth < 451) return "medium";
return "large";
}

组件会调用此函数并根据宽度调整其行为。例如,下面的模板将在更宽的屏幕上显示更多内容:

<div>
{{getWidthRange()==='small'? shortText : longText}}
</div>

更好的是,我会设置一个 Observable,当浏览器从一个范围过渡到下一个范围时发出:

widthRangeChanges = Observable.create( observer => 
{
// ? how to detect when width changes
let oldRange = '...';
let newRange = '...';
if(newRange!==oldRange) observer.next(newRange);
}
).share(); //all subscribers share same output channel

组件然后可以订阅 widthRangeChanges 并在收到新范围时更新模型值。我如何在 Angular 2 中获取此信息?

Angular 2 rc-6typescript 2.0.2rxjs 5 beta 11

最佳答案

你可以使用 RxJS 的 fromEvent 运算符:

 const $resizeEvent = Observable.fromEvent(window, 'resize')
.map(() => {
return document.documentElement.clientWidth;
})
.debounceTime(200)

$resizeEvent.subscribe(data => {
this.width = data;
});

Plunker Example

关于css - Angular 2 : Detect changes in browser width and update model,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39550482/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com