我很难初始化一个新的资源对象。
从 REST API 检索数据工作得很好。
错误在以下代码行中引发:
var newRoom = new this.lobbyStorage.LobbyRoom();
带有以下消息:
“this.$ngResource 不是函数”
我一直在尝试很多事情,但没有什么能让我得到积极的结果。
解决方案
使用语法 new Function(...) 或仅 Function(...) 创建的函数将其 name 属性设置为空字符串。在以下示例中创建了匿名函数,因此 name 返回一个空字符串:
您不能更改函数的名称,此属性是只读的:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name
大厅-storage.ts
module lobby.services {
export class LobbyStorage {
private baseUrl : string = 'http://localhost:2999'; /*this.appConstant.baseUrl + '/lobby';*/
public static $inject = [
'$http',
'$resource'
];
constructor(private $http: ng.IHttpService, private $ngResource : ng.resource.IResourceService /*,private appConstant*/) {
}
public LobbyRoom() : ng.resource.IResourceClass<ng.resource.IResource<any>> {
return this.$ngResource(this.baseUrl + '/lobby/:id', { id: '@id' });
}
}
}
大厅模块.ts
///<reference path='../../typings/tsd.d.ts' />
module lobby {
'use strict';
/* @ngdoc object
* @name lobby
* @description
*
*/
angular
.module('lobby', [
'ngRoute',
'ngResource'
])
.service('lobbyStorage', lobby.services.LobbyStorage)
/* .constant('appConstant', lobby.constants.Constants.Default);*/
}
大厅控制器.ts
/// <reference path='../_lobby.ts' />
module lobby.controllers {
'use strict';
class LobbyCtrl {
public lobbyData : Array<string>;
public gameCreation : boolean = true;
public currentItem : any = {};
// $inject annotation.
// It provides $injector with information about dependencies to be injected into constructor
// it is better to have it close to the constructor, because the parameters must match in count and type.
// See http://docs.angularjs.org/guide/di
public static $inject = [
'$scope',
'$log',
'lobbyStorage'
];
// dependencies are injected via AngularJS $injector
constructor(private $scope, private $log : ng.ILogService, private lobbyStorage) {
this.init();
}
// Initializer function
private init(){
this.initializeLobbyData();
}
public createRoom() : void{
var newRoom = new this.lobbyStorage.LobbyRoom();
newRoom.name = this.currentItem.name;
newRoom.$save();
}
public initializeLobbyData(){
var res = this.lobbyStorage.LobbyRoom().query(
() => this.lobbyData = res,
() => this.lobbyData[0] = "Error"
);
}
}
/**
* @ngdoc object
* @name lobby.controller:LobbyCtrl
*
* @description
*
*/
angular
.module('lobby')
.controller('LobbyCtrl', LobbyCtrl);
}