Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.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
如何使AngularJS$资源在从多个控制器引用时返回同一实例?_Angularjs_Angularjs Service_Angular Resource - Fatal编程技术网

如何使AngularJS$资源在从多个控制器引用时返回同一实例?

如何使AngularJS$资源在从多个控制器引用时返回同一实例?,angularjs,angularjs-service,angular-resource,Angularjs,Angularjs Service,Angular Resource,我在同一个视图中组合了多个指令,所有指令都访问同一个资源。其中一个指令包含一个表单 我希望$resource返回一个单例,因此数据中的任何更改都会自动反映在所有其他指令中,但事实并非如此 请看一个例子。另请参见下面的代码: angular .模块(“应用程序”、[“ngResource”]) .控制器(“c1”,功能($scope,res){ $scope.response=res.get(); }) .控制器(“c2”,功能($scope,res){ $scope.response=res.g

我在同一个视图中组合了多个指令,所有指令都访问同一个资源。其中一个指令包含一个表单

我希望$resource返回一个单例,因此数据中的任何更改都会自动反映在所有其他指令中,但事实并非如此

请看一个例子。另请参见下面的代码:

angular
.模块(“应用程序”、[“ngResource”])
.控制器(“c1”,功能($scope,res){
$scope.response=res.get();
})
.控制器(“c2”,功能($scope,res){
$scope.response=res.get();
})
.服务(“res”,功能($resource){
常量url=”https://httpbin.org/delay/1";
返回$resource(url{
get:{method:“get”},
保存:{method:“POST”}
});
});

c1:{{response.origin}}
c2:{response.origin}}

我希望输入框中的任何更改都会在两个视图中更新($scope.response应该指向同一个对象),但只会更改同一隔离范围下的一个


有没有一种方法可以在视图之间共享相同的$resource对象?

一种方法是将$resource保存在服务中,并且只能通过服务方法访问它。看见您必须小心使用这种方法,因为每次调用singleton时都会使用传递的参数更新它。因此,在资源唯一的情况下,这非常有效

angular
.模块(“应用程序”、[“ngResource”])
.控制器(“c1”,功能($scope,srv){
$scope.srv=srv;
$scope.srv.get(“https://httpbin.org/delay/1");
})
.控制器(“c2”,功能($scope,srv){
$scope.srv=srv;
$scope.srv.get(“https://httpbin.org/delay/1");
})
.服务(“srv”,功能($resource){
让服务={};
service.get=url=>{
服务。$resource=$resource(url{
get:{method:“get”},
保存:{method:“POST”}
});
service.resource=service.$resource.get();
};
回程服务;
});
HTML:


c1:{{srv.resource.origin}
c2:{{srv.resource.origin}}


一种方法是将$resource保存在服务中,并且只通过服务方法访问它。看见您必须小心使用这种方法,因为每次调用singleton时都会使用传递的参数更新它。因此,在资源唯一的情况下,这非常有效

angular
.模块(“应用程序”、[“ngResource”])
.控制器(“c1”,功能($scope,srv){
$scope.srv=srv;
$scope.srv.get(“https://httpbin.org/delay/1");
})
.控制器(“c2”,功能($scope,srv){
$scope.srv=srv;
$scope.srv.get(“https://httpbin.org/delay/1");
})
.服务(“srv”,功能($resource){
让服务={};
service.get=url=>{
服务。$resource=$resource(url{
get:{method:“get”},
保存:{method:“POST”}
});
service.resource=service.$resource.get();
};
回程服务;
});
HTML:


c1:{{srv.resource.origin}
c2:{{srv.resource.origin}}


在控制器之间共享数据有几种方法。没有具体的“正确的方法”。共享对象方法的缺点是没有明确地通知订阅者对象的更改。框架必须监视对象的更改。Angular2+已经放弃了这种方法,因此任何依赖它的AngularJS代码都将难以迁移。@georgeawg感谢您的评论。严格来说,这不是事实。请参阅代码笔示例,其中跨控制器()更新共享服务。代码笔中的示例取决于模板中的观察者,并且不会通知控制器更新。我所说的缺点适用。在控制器之间共享数据有几种方法。没有具体的“正确的方法”。共享对象方法的缺点是没有明确地通知订阅者对象的更改。框架必须监视对象的更改。Angular2+已经放弃了这种方法,因此任何依赖它的AngularJS代码都将难以迁移。@georgeawg感谢您的评论。严格来说,这不是事实。请参阅代码笔示例,其中跨控制器()更新共享服务。代码笔中的示例取决于模板中的观察者,并且不会通知控制器更新。我所说的缺点适用。