我从零开始用angular 2和typescript开始了一个新项目:
ng new myProject
然后我用
安装了web3(用于以太坊)npm install web3
在index.html的头部,我补充道:
<script src="node_modules/web3/dist/web3.min.js"></script>
此路径似乎没问题,因为我没有错误(如果我更改了一个char我有错误)。 在文档中: c.t.n.repl/print-and-return 我发现了这一点:直接从全局命名空间使用web3对象: 的console.log(WEB3); 但是web3没有定义。 我怎样才能得到这个对象? 注意:在后台我开始geth --testnet
答案 0 :(得分:4)
您仍然需要先实例化它。使用JavaScript测试:
var web3 = new Web3();
window.console.log(web3);
> Object { _requestManager: Object, currentProvider: undefined, eth:
Object, db: Object, shh: Object, net: Object, personal: Object, bzz:
Object, settings: Object, version: Object, 2 more… }
我没有使用TypeScript的经验,但是你明白了。 web3js提供了库,您需要初始化它才能使用。它基本上是链接文档页面的第一行。
答案 1 :(得分:0)
我找到了一个解决方案,但是有一半的时间,转换器会在转换代码时抛出错误。 我所做的是将web3对象显式地放在窗口对象之外。
private getWeb3Provider(): Web3 {
if (typeof window.web3 !== 'undefined') {
return new Web3(window.web3.currentProvider);
} else {
this.web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545'));
return this.web3;
}}
在构造函数中:
constructor() {
this.name = 'Web3 Service';
console.log(`${this.name}: initialized...`);
this.web3 = this.getWeb3Provider();
}
答案 2 :(得分:0)
您可以从Window对象中获取对象:
var web3: any = window["web3"];
var Web3: any = window["Web3"];
var web3 = new Web3(web3.currentProvider);
this.contract = web3.eth.contract(this.contractAbi).at(this.contractAddress);