小编OzW*_*OzW的帖子

ngFor在array.push之后显示空项

我在我的模板中有这个:

<input type="button" value="add" (click)="addEnvVar()"/>
<div *ngFor="let envVar of application.env_vars">
    <input type="text" name="key" [(ngModel)]="envVar.key">
    <input type="text" name="value" [(ngModel)]="envVar.value">
</div>
Run Code Online (Sandbox Code Playgroud)

背后的代码addEnvVar(): this.application.env_vars.push({key:'', value:''});

初始化组件时,内部有一个对象env_vars,它被渲染得很好(<input>填充了字段).单击"添加"后,我可以在控制台中看到env_vars中确实有两个对象(第二个是我刚添加的'空'对象),在视图中确实有两个<div>s envVar,但是所有4个 <input>字段是空的.

我究竟做错了什么?

UPDATE

我认为问题在于,当ngFor生成多个div输入时,每个输入div都获得相同的硬编码name属性(在我的情况下 - "key"和"value"),并且值以某种方式附加到该属性.我改name="key"name="key_{{i}}"(i是一个模板变量持有ngForindex属性).

问题是,这是要走的路吗?还是我还缺少什么?

ngfor angular

7
推荐指数
1
解决办法
2144
查看次数

make node的异步返回bluebird promise

在Node.js v7.8.0中我有一个模块foo.js:

class Foo {
    async bar() { return 'bar' } 
}
Run Code Online (Sandbox Code Playgroud)

在主模块中,app.js我将Bluebird分配给全局Promise:

global.Promise = require('bluebird').

在'app.js'我有:

const Foo = require('./foo);
let foo = new Foo();
foo.bar().tap(res => console.log(res));
Run Code Online (Sandbox Code Playgroud)

我假设因为我用Bluebird替换了全局Promise,对异步函数的调用将返回一个Bluebird的承诺(有.tap),但显然我错了,因为我收到了错误:

TypeError: foo.bar(...).tap is not a function

有没有办法实现我的愿望?

global node.js promise async-await bluebird

6
推荐指数
0
解决办法
280
查看次数

标签 统计

angular ×1

async-await ×1

bluebird ×1

global ×1

ngfor ×1

node.js ×1

promise ×1