【问题标题】:Angular2 - changing model data using PromisesAngular2 - 使用 Promises 更改模型数据
【发布时间】:2016-01-15 01:27:58
【问题描述】:

我正在尝试使用 Angular2(没有 Angular1 的经验),我已经成功地使用了数据绑定,但我现在想在组合中添加 Promise 以模拟对数据的异步请求。 在下面的代码中,将 newData 设置为对象字面量可以正常工作,但将其设置为现有的填充对象则不起作用。

在尝试了一天多之后,我需要一些帮助。 我正在寻找最简单的方法来让我的承诺返回一些数据并让它更新模板中的插值。我读过有时会为此使用区域,但目前,希望将其保持在最低限度,以帮助我理解(因此我从示例代码中删除了工厂类、接口和依赖注入)

我怀疑答案在this victorsavkin post,但以我目前的理解水平,它超出了我的范围。

http://plnkr.co/edit/amLIZWe5UI9jlvpVGv9V?p=preview

import {Component} from 'angular2/core'
import {MockData} from './mock-data.ts'

@Component({
  selector: 'my-app',
  providers: [],
  template:`
    <h1>
    Hello {{data.name}}
    </h1>`,
  directives: []
})
export class App {
  public data = {}

  constructor() {
    new Promise((response, reject) => {
      setTimeout(function() {
        newData = {name:'Sid'}      //works
        //newData = MockData        //doesn't work
        response(newData)  
      }, 1000)

    })
    .then(response => this.data = response)
  }

}

模拟数据.js

exports MockData = {
  name:'Nancy'
}

【问题讨论】:

  • 我认为问题不在于 Promise,而在于导入。如果您从构造函数中删除所有内容并仅添加 console.log(MockData) 它会产生相同的错误...
  • 您发现了我不正确的路径拼写错误,我应该从控制台输出中发现,但这不是我想要解决的问题。甚至将 MockData 直接移动到 app.js 中也失败了。
  • 在 IE11 中运行也有问题,但这是另一个问题:github.com/johnpapa/angular2-tour-of-heroes/issues/41

标签: javascript typescript angular


【解决方案1】:

我对您的 plunker 进行了以下两项更改以使其正常工作:

export var MockData = {
  name:'Brian'
}

import {MockData} from '../mock-data.ts'

plunker

如果您使用Elvis operator (?.),您也不必初始化data 属性:

Hello {{data?.name}}

然后在你的组件中:

public data;

【讨论】:

  • 谢谢。所以忽略我的 2 个愚蠢的错误(导入而不是导入,以及不正确的路径),为什么 'export var' 起作用,而只是 'export' 或 'export public' 不起作用?
  • 猫王操作员信息非常有用@mark-rajcok。 angular.io/docs/ts/latest/guide/… 解释了为什么整个视图崩溃(因为 MockData 为空),所以真正的问题在于我对 TypeScript 变量/对象声明或变量范围缺乏了解
猜你喜欢
  • 2017-04-25
  • 2011-10-31
  • 2017-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多