【问题标题】:Angular transform data with NgStyle and property Binding (or sth else)使用 NgStyle 和属性绑定(或其他)的角度变换数据
【发布时间】:2018-03-04 23:16:43
【问题描述】:

我正在学习 Angular 中的编程,但我遇到了属性绑定问题。但首先是我的代码部分:

// TS FILE

data[
{"id": "1", "name": "tester", "rev": "1"},
{"id": "2", "name": "tester", "rev": "1"},
{"id": "3", "name": "tester", "rev": "1"},
];


createNumberArray(): number[] {
// code to fill array
return anyArrayOfNumbers
}
<div  *ngFor="let datas of data; let i = index" >


    <ul>
  <li class='list-item' [id]= datas.id [ngStyle]="{ 'transform': 'rotate( numberArray[i] deg) translate(0,-100px) rotate(-numberArray[i]deg)' }">
     <!-- how it would work: <li class='list-item' [id]= datas.id [ngStyle]="{ 'transform': 'rotate(200deg) translate(0,-100px) rotate(-150deg)' }"> -->
            <div class='label1'><img alt='notfound' class='img2' src='any icon'></div>
            <div class='label2'>
                {{ datas.name }}
            </div>
            <div class='label3'>
                {{ datas.id }}
            </div>
            <div class='label4'>
                {{ datas.rev }}
            </div>
        </li>
    </ul>
</div>

data 属性包含一个对象数组,我想用他的名字、id 和 rev 列出每个对象。我可以显示它们,但现在我也希望它们动态旋转。所以我创建了一个新的数字数组,它来自一个名为 createNumberArray() 的函数。这些数字将告诉 ngStyle 为每个循环运行,他将使用哪个数字来旋转。这就是我想要的样子:

<li class='list-item' [id]= datas.id [ngStyle]="{ 'transform': 'rotate( numberArray[i] deg) translate(0,-100px) rotate(-numberArray[i]deg)' }">

但这不起作用,因为我无法让它工作,我尝试使用属性绑定,但从未从转换内的数组中取出数字。 这就是它的工作方式(始终使用相同的数字):

<!-- how it would work: <li class='list-item' [id]= datas.id [ngStyle]="{ 'transform': 'rotate(200deg) translate(0,-100px) rotate(-150deg)' }"> -->

我设法用 Js、Jquery 和 html 完成这项工作,但现在我想用 Angular 完成这项工作。而且也没有 Jquery,所以我不只是复制我的旧代码。但是我对将来是否应该在 Angular 中使用 Jquery 感到有些困惑。操作 DOM 的最佳方式是什么,你们怎么看?

非常感谢您的帮助。我已经感谢您抽出时间阅读我的问题。

【问题讨论】:

  • 您可能需要'... rotate(-' + numberArray[i] + 'deg) ...' 之类的东西,因为您在表达式中。但是createNumberArray 是在哪里调用的呢?
  • @Jeto 那也是我第一次教,可能有一些错误的引号。但我的问题是在 html 文件中调用 createNumberArray() 的问题。我想把它称为*ngFor let numbers of createNumberArray,但没有用。所以我尝试了numberArray = [createNumberArray()]之类的东西,但没有人为我工作。

标签: javascript html css angular typescript


【解决方案1】:

首先,在构造函数中设置数组值:

打字稿:

  ...
  anyArrayOfNumbers: number[] = [];
  constructor() {
    for (let i = 0; i < this.data.length; i++) {
      this.anyArrayOfNumbers.push(200);
    }
  }

  getNumberArray(index): number {
    return this.anyArrayOfNumbers[index];
  }

然后从html中调用getNumberArray方法:

HTML

...[ngStyle]="{ 'transform': 'rotate('+numberArray[i]+'deg) translate(0,-100px) rotate('+numberArray[i]+'deg)' } ...

DEMO

【讨论】:

  • 我的实际问题是如何将 TS 文件的 createNumberArray() 中的 numberArray 获取到 html 文件中。对不起,不精确,但你能告诉我如何得到这个数字数组吗?
  • 我不太清楚。这个演示是否接近您正在寻找的内容? stackblitz.com/edit/angular-xxwsyt
  • 这就是我希望它工作的方式,但使用不同的方式:public anyArrayOfNumbers: number[]; getNumberArray(i): number { for (let i = 0; i &lt; this.data.length;i++){ this.anyArrayOfNumbers[i] = 100; } return this.anyArrayOfNumbers[i]; } 如果我这样尝试,我总是调用 0 的属性,所以我尝试从构造函数调用该方法或 onInit,但同样的问题。如果我在 html 中调用该方法,我的数组永远不会被填满。
  • 我安排了您的代码以使其工作:stackblitz.com/edit/angular-qg16h1?file=app/app.component.ts
  • 很高兴听到这个消息:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-23
  • 1970-01-01
  • 2021-09-13
  • 2018-03-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多