我正在寻找一种合理的方式来做这件事。有点学习Angular,我有点困惑......
我有服务
.service('Cameras', function(Camera){
var _list = [];
// public API
this.list = _list;
document.body.addEventListener("dbready", function(){
loadCameras(function(result){
for(var i=0; i < result.rows.length; i++)
_list.push(new Camera(result.rows.item(i).name, result.rows.item(i).ip, result.rows.item(i).id));
});
}, false);
})
试图使用此工厂
.factory('Camera', function(name,ip,id) {
this.name = name;
this.ip = ip;
this.videoFiles = [];
this.photoFiles = [];
this.battery = 0;
this.space = 0;
})
创建Camera对象。
我收到此错误
[$ injector:unpr]未知提供者:nameProvider&lt; - name&lt; - Camera&lt; - Cameras
我认为这是因为我没有正确地将Camera工厂注入Camera服务中 - 我可能会以错误的方式解决这个问题 - 但任何人都可以让我知道正确的方法!
答案 0 :(得分:0)
没有。您将Camera声明为Angular服务。
Camera服务需要注入服务'name',服务'ip'和服务'id'。这些服务不存在。
请记住,服务是单身。他们的工厂可以将其他服务作为参数,但不能使用名称,ip或id等数据:Angular在创建唯一的Camera实例时会获取这些数据吗?
如果您需要这些参数来构建相机,那么它根本不应该是服务。只是一个常规的JavaScript构造函数。因此,它不应该注入Cameras
服务。
另请注意,相机不会将ID作为参数传递。
答案 1 :(得分:0)
在其他服务中使用服务需要您将服务注入其中
尝试将Camera
工厂直接注入服务
.service('Cameras',['Camera', function(Camera){
var _list = [];
// public API
this.list = _list;
document.body.addEventListener("dbready", function(){
loadCameras(function(result){
for(var i=0; i < result.rows.length; i++)
_list.push(new Camera(result.rows.item(i).name, result.rows.item(i).ip, result.rows.item(i).id));
});
}, false);
}])