构造函数super()es6 angularjs
问题描述:
我有class AbstractRepository和class UserRepository extends AbstractRepository。我在我的构造函数中声明了super(),但是错误是_http没有被定义。我如何在类UserRepository中插入$ http。构造函数super()es6 angularjs
AbstractRepository:
import _ from 'lodash';
import 'rxjs/add/operator/map';
class AbstractRepository {
_http;
_config;
_Model;
constructor($http, config, Model) {
'NgInject'
this._http = $http;
this._config = config;
this._Model = Model;
}
/**
* Gets all instances of repository entities
*
* @returns {Observable<Model[]>} - List of observables of all entities
*/
getAll() {
const url = this._config.url;
return this._http.get(url)
.map(dataList => dataList.json())
.map(dataList => _.map(dataList, item => new this._Model(item)));
}
/**
* Gets a specific item of repository entity
*
* @param {number} itemId - ID of an item to find
* @returns {Observable<Model>} - Observable of repo entity item
*/
getItem(itemId) {
const url = this._config.url + itemId;
return this._http.get(url)
.map(item => item.json())
.map(item => new this._Model(item));
}
/**
* Creates a specific item of repository entity
*
* @param {Model} item - Item to create
* @returns {Observable<Model>} - Observable of recently created item
*/
createItem(item) {
const url = this._config.url;
return this._http.post(url, item)
.map(item => item.json())
.map(item => new this._Model(item));
}
/**
* Updates a specific item of repository entity
*
* @param {number} itemId - ID of an item to update
* @param {Model} item - Wanted updated item
* @returns {Observable<Model>} - Observable of repo entity item
*/
updateItem(itemId, item) {
const url = this._config.url + itemId;
return this._http.put(url, item)
.map(item => item.json())
.map(item => new this._Model(item));
}
}
export {AbstractRepository}
UserRepository:
import { USER_REPO_CONFIG } from '../repository.config';
import { AbstractRepository } from '../abstract.repository';
import { UserModel } from './user.model';
import 'rxjs/add/operator/map';
class UserRepository extends AbstractRepository {
_http = $http;
constructor() {
'NgInject'
super(_http, USER_REPO_CONFIG, UserModel);
}
/**
* Gets the user by ID
*
* @param {number} userId - ID of a user to find
* @returns {Observable<UserModel>} - User model instance
*/
getUser(userId) {
return this.getItem(userId);
}
/**
* Creates the user
*
* @param {UserModel} user - User model instance
* @returns {Observable<UserModel>} - User model instance observable
*/
createUser(user) {
return this.createItem(user);
}
/**
* Updates the user
*
* @param {number} userId - ID of a user to update
* @param {UserModel} user - User model instance
* @returns {Observable<UserModel>} - User model instance observable
*/
updateUser(userId, user) {
return this.updateItem(userId, user);
}
}
export {UserRepository};
答
你仍然需要声明$http
为孩子构造函数的参数,如果你想将它转发给父类的构造:
class UserRepository extends AbstractRepository {
constructor($http) {
'NgInject'
super($http, USER_REPO_CONFIG, UserModel);
}
…
}
+0
谢谢这个工作! –
什么是'_http = $ http;'?这是无效的ES6。你认为'$ http'来自哪里? – Bergi
我想设置standart angularjs $ http到我的类属性 –
随机的'NgInject'字符串是令人畏缩的 –