Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TypeScript/AngularJS-使用ngResource服务_Angularjs_Typescript_Ngresource_Angularjs Ng Resource - Fatal编程技术网

TypeScript/AngularJS-使用ngResource服务

TypeScript/AngularJS-使用ngResource服务,angularjs,typescript,ngresource,angularjs-ng-resource,Angularjs,Typescript,Ngresource,Angularjs Ng Resource,我很难初始化一个新的资源对象 从RESTAPI检索数据工作得很好 在以下代码行引发错误: var newRoom = new this.lobbyStorage.LobbyRoom(); 发出以下信息: “此.$ngResource不是一个函数” 我已经尝试了很多事情,但是没有什么能让我得到积极的结果 解决方案 使用语法new Function(…)或just Function(…)创建的函数的name属性设置为空字符串。在以下示例中,创建了匿名函数,因此name返回空字符串: 无法更改函数的

我很难初始化一个新的资源对象

从RESTAPI检索数据工作得很好

在以下代码行引发错误:

var newRoom = new this.lobbyStorage.LobbyRoom();
发出以下信息:

“此.$ngResource不是一个函数”

我已经尝试了很多事情,但是没有什么能让我得到积极的结果

解决方案 使用语法new Function(…)或just Function(…)创建的函数的name属性设置为空字符串。在以下示例中,创建了匿名函数,因此name返回空字符串:

无法更改函数的名称,此属性为只读:


大堂-storage.ts
module lobble.services{
导出类LobbyStorage{
私有baseUrl:string='1!'http://localhost:2999“;/*this.appConstant.baseUrl+”/lobb'*/
公共静态$inject=[
“$http”,
“$resource”
];
构造函数(private$http:ng.IHttpService,private$ngResource:ng.resource.IResourceService/*,private-appConstant*/){
}
公共LobbyRoom():ng.resource.IResourceClass{
返回此.ngResource(this.baseUrl+'/lobb/:id',{id:'@id'});
}
}
}

大堂模块
///
模块大厅{
"严格使用",;
/*@ngdoc对象
*@name大堂
*@说明
*
*/
有棱角的
.模块('大厅'[
"ngRoute",,
“ngResource”
])
.service('lobbyStorage',lobby.services.lobbyStorage)
/*.constant('appConstant',lobb.constants.constants.Default)*/
}

大堂控制员
//
模块大厅控制器{
"严格使用",;
类LobbyCtrl{
公共游说数据:数组;
公共游戏创建:布尔值=true;
public currentItem:any={};
//$inject注释。
//它为$injector提供了有关要注入构造函数的依赖项的信息
//最好让它靠近构造函数,因为参数的计数和类型必须匹配。
//看http://docs.angularjs.org/guide/di
公共静态$inject=[
“$scope”,
“$log”,
“大厅储藏”
];
//依赖项通过AngularJS$injector注入
构造函数(private$scope,private$log:ng.ILogService,private lobby存储){
this.init();
}
//初始化函数
私有init(){
这个.initializeLobbyData();
}
公共createRoom():void{
var newRoom=newthis.lobbyStorage.LobbyRoom();
newRoom.name=this.currentItem.name;
newRoom.$save();
}
公共首字母缩写ELOBYDATA(){
var res=this.lobbyStorage.lobbyStorage().query(
()=>this.lobbyData=res,
()=>this.lobbyData[0]=“错误”
);
}
}
/**
*@ngdoc对象
*@name lobby.controller:LobbyCtrl
*
*@说明
*
*/
有棱角的
.模块(“大厅”)
.controller('LobbyCtrl',LobbyCtrl);
}

当您使用“new”调用LobbyRoom时,表示您正在创建一个新对象。“this”LobbyRoom使用的对象将是您正在创建的新对象,不会引用该类。你应该做两件事中的任何一件。创建LobbyRoom类或在不使用“new”的情况下调用LobbyRoom,如下所示:

var newRoom = this.lobbyStorage.LobbyRoom();

这里的要点是我们调用函数而不是构造函数

// wrong
// this is not constructor call
var newRoom = new this.lobbyStorage.LobbyRoom()

// ok
// just a method
var newRoom = this.lobbyStorage.LobbyRoom()
有一个(只需单击运行)

如果我们不将其称为构造函数,而将其称为方法,那么它将起作用:

var x = new lobby.services.LobbyStorage({}, (str) => {return str});

var y =  x.LobbyRoom();

alert(y);

检查一下

谢谢你的提示,我没有完全注意到这一点——有一次我超出了这一点,当我试图为资源对象分配某些内容时,又出现了一行错误
newRoom.name=this.currentItem.name
导致=>TypeError:无法分配给函数资源(值){shallowClearAndCopy(值| |{},this)}的只读属性“name”
var newRoom = this.lobbyStorage.LobbyRoom();
// wrong
// this is not constructor call
var newRoom = new this.lobbyStorage.LobbyRoom()

// ok
// just a method
var newRoom = this.lobbyStorage.LobbyRoom()
var x = new lobby.services.LobbyStorage({}, (str) => {return str});

try {
  var y = new x.LobbyRoom();
}
catch (ex){
  alert(ex);    
}
var x = new lobby.services.LobbyStorage({}, (str) => {return str});

var y =  x.LobbyRoom();

alert(y);