Angularjs 1.6组件:类型错误:无法设置属性 '的DetailsView' 未定义

问题描述:

.component.js的Angularjs 1.6组件:类型错误:无法设置属性 '的DetailsView' 未定义

export var breachDetailsConfig = { 
template: template, 
controller: BreachDetailsComponent 
}; 
class BreachDetailsComponent extends AutoBoundDependencies { 

static get $inject() { return ['breachDetailsService', '$http']}; 

constructor(...dependencies) { 
    super(dependencies); 
} 

$onInit(){ 
    this.detailsView = []; 
    this.getBreachDetails().then(function(data){ 
    this.detailsView = data; // getting error here 
    }); 
    // this.getBreachDetails().then(function(detailsView) { 
    //  this.detailsView = detailsView; 
    // }); // want to use this part 

} 

getBreachDetails() { 
    return this.$http.get('breach-mock.json').then((response) => { 
     console.log(response.data); 
     return response.data; 
    }); 
} 
} 

地址:

getBreachDetails() { 
// get the breach details from JSON 
    // this.breachDetailsService.getBreachDetails().then((detailsView) => { 
    // this.detailsView = detailsView; 
    // }); 
} 

什么错在这里 - 我试图做一个服务从http调用获取数据我得到一个错误TypeError:this.breachDetailsS​​ervice.getBreachDetails是不是一个函数

我已经注入服务使用以下:

static get $inject() { return ['breachDetailsService', '$http']}; 

地址: restservice.js类

import angular from 'angular'; 
import breachDetailsService from './breach-details.service'; 
let restServiceModule = angular.module('rest-services', []); 
restServiceModule.service('breachDetailsService', breachDetailsService); 

这是我的所有的配置,没有控制器JS

export var breachDetailsConfig = { 
template: template, 
controller: BreachDetailsComponent 
}; 

,因为使用的是打字稿,使用arrow function (ES6新功能)来保持上下文。

this.getBreachDetails().then(data => {  // <---- arrow function here 
    this.detailsView = data; // getting error here 
}); 

,或者您也可以手动绑定this

this.getBreachDetails().then(function(data){ 
    this.detailsView = data; // getting error here 
}.bind(this)); 
+0

谢谢!有用。 – user5636236

+0

@ user5636236现在有什么问题?你可以在你的问题上编辑。 :) – Pengyy

+0

@ user5636236你有注入'breachDetailsS​​ervice'到你的控制器吗?还需要发布您的服务代码。 – Pengyy