首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在Angular中选择绑定属性

无法在Angular中选择绑定属性
EN

Stack Overflow用户
提问于 2018-08-21 03:34:43
回答 2查看 92关注 0票数 2

我在angular中有一个自定义的进度条。我想绑定一个用于[value]的选择器。但是,如果我在Angular中绑定属性,就不能再进行选择了。

<progress-bar value="50">工作

<progress-bar [value]="value">失败

在第二种情况下,该属性不存在,它只是作为ng-reflect*属性之一存在。这是预期的行为吗?

组件:

代码语言:javascript
复制
ProgressBar {
    private currentValue;
    @Input() set value(value: number) { this.currentValue = value; }
    get value() { return this.currentValue; }
...
}

scss:

代码语言:javascript
复制
progress-bar {
    display: block;
    height: 4px;
    width: 100%;

    // determinate
    &[value] {
        background: map_get($color-palette, progress-bar-background);

        .progress {
            height: 100%;
            background: map_get($color-palette, progress-bar-color);

            animation: none;
            transform-origin: top left;
            transition: transform 250ms ease;
        }
    }

    // indeterminate
    &:not([value]) {
        background: transparent;
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-21 04:45:48

您可以使用attribute binding代替property binding

代码语言:javascript
复制
<progress-bar [attr.value]="value">
代码语言:javascript
复制
export class ProgressBar {

  constructor(private elementRef: ElementRef<HTMLElement>) {}

  get value() {
    const element = this.elementRef.nativeElement;
    return element.getAttribute("value");
  }
}

有关演示,请参阅this stackblitz

一种更简单的解决方案是使用HostBinding在组件上有条件地设置类

代码语言:javascript
复制
export class ProgressBar {

  private currentValue;

  @Input()
  get value() { return this.currentValue; }
  set value(value: number) { this.currentValue = value; }

  @HostBinding("class.has-value") get hasValue(): boolean {
    return !!this.currentValue;
  }
}

并根据类选择器应用样式:

代码语言:javascript
复制
progress-bar {
  ...
  &.has-value { 
    ...
  }
  &:not(.has-value) { 
    ...
  }
}

有关演示,请参阅this stackblitz

票数 1
EN

Stack Overflow用户

发布于 2018-08-21 04:40:53

您正尝试在对象和方法之间使用单向属性绑定。删除getter和setter方法。它们有点没用,因为javascript没有真正的私有属性或方法。

代码语言:javascript
复制
ProgressBar {
    @Input() public value: number
...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51937422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档