Angularjs:实现与工厂相同的服务结构
Angularjs: Achieve Same Structure for Service as Factory
我正在玩 angularjs
services
和 factories
。我创建了一个名为 BookFactory
的工厂,如下所示:
// Code goes here
app
.factory('BootFactory', function() {
var bookFactory;
function add() {
}
function remove() {
}
function getAll() {
}
bookFactory = {
add: add,
remove: remove,
getAll: getAll
}
return bookFactory;
});
还有一个BookService
如下:
app.service('BookService', function() {
var bookService;
function add() {
}
function remove() {
}
function getAll() {
}
/*
It throws:
Uncaught ReferenceError: Invalid left-hand side in assignment.
How can I achieve the same structure with the services which I have used in factories.
this = {
add: add,
remove: remove,
getAll: getAll
};
*/
//Do I have to add all methods like this
this.add=add;
this.remove=remove;
this.getAll=getgAll;
//Or there's any other better way to achieve it
});
我想做的是保持结构一致,即我希望工厂和服务都像这样:
bookFactory = {
add: add,
remove: remove,
getAll: getAll
}
在工厂的情况下,它工作正常。但是在服务的情况下我不能这样做。因为服务与 this
一起工作,我不能这样做:
/*
It throws:
Uncaught ReferenceError: Invalid left-hand side in assignment.
How can I achieve the same structure with the services which I have used in factories.
this = {
add: add,
remove: remove,
getAll: getAll
};
*/
我想做的是:
//Do I have to add all methods like this
this.add=add;
this.remove=remove;
this.getAll=getgAll;
//Or there's any other better way to achieve it
有没有更好的方法呢?这是 plunkr。
您可以像这样创建 bookService -
app.service('BookService', function() {
return {
add:add,
remove:remove,
getAll:getAll
};
function add() {
}
function remove() {
}
function getAll() {
}
});
你可以这样做:
app.service('BookService', function() {
function add() {
}
function remove() {
}
function getAll() {
}
var bookService = {
add: add,
remove: remove,
getAll: getAll
};
return bookService;
});
Angular 并不关心您的服务 return。工厂 vs 服务只是关于它如何被调用,工厂是这样调用的:factory() 和服务是这样的:new service()。在 JS 中,构造函数可以return任何你想要的东西。
工厂和服务只是创建服务对象实例的两种略有不同的方式。
工厂函数return实例本身。
服务函数是一个构造函数,与 new
(或类似的东西)一起使用来创建实例。 JS中的构造函数可以return直接实例化的对象实例(而不是默认的this
、read more)。
这应该让你这样做:
.service('BookService', function() {
var bookService;
function add() {}
function remove() {}
function getAll() {}
bookService = {
add: add,
remove: remove,
getAll: getAll
}
return bookService;
})
所以是的,factory
和 service
可以以完全相同的方式运行,因为这个 JS 怪癖。
我真的不知道你为什么要对两者使用相同的配方,因为从语义上讲它们做的是相同的,为什么不在这种情况下使用特定服务创建所有服务呢?
我正在玩 angularjs
services
和 factories
。我创建了一个名为 BookFactory
的工厂,如下所示:
// Code goes here
app
.factory('BootFactory', function() {
var bookFactory;
function add() {
}
function remove() {
}
function getAll() {
}
bookFactory = {
add: add,
remove: remove,
getAll: getAll
}
return bookFactory;
});
还有一个BookService
如下:
app.service('BookService', function() {
var bookService;
function add() {
}
function remove() {
}
function getAll() {
}
/*
It throws:
Uncaught ReferenceError: Invalid left-hand side in assignment.
How can I achieve the same structure with the services which I have used in factories.
this = {
add: add,
remove: remove,
getAll: getAll
};
*/
//Do I have to add all methods like this
this.add=add;
this.remove=remove;
this.getAll=getgAll;
//Or there's any other better way to achieve it
});
我想做的是保持结构一致,即我希望工厂和服务都像这样:
bookFactory = {
add: add,
remove: remove,
getAll: getAll
}
在工厂的情况下,它工作正常。但是在服务的情况下我不能这样做。因为服务与 this
一起工作,我不能这样做:
/*
It throws:
Uncaught ReferenceError: Invalid left-hand side in assignment.
How can I achieve the same structure with the services which I have used in factories.
this = {
add: add,
remove: remove,
getAll: getAll
};
*/
我想做的是:
//Do I have to add all methods like this
this.add=add;
this.remove=remove;
this.getAll=getgAll;
//Or there's any other better way to achieve it
有没有更好的方法呢?这是 plunkr。
您可以像这样创建 bookService -
app.service('BookService', function() {
return {
add:add,
remove:remove,
getAll:getAll
};
function add() {
}
function remove() {
}
function getAll() {
}
});
你可以这样做:
app.service('BookService', function() {
function add() {
}
function remove() {
}
function getAll() {
}
var bookService = {
add: add,
remove: remove,
getAll: getAll
};
return bookService;
});
Angular 并不关心您的服务 return。工厂 vs 服务只是关于它如何被调用,工厂是这样调用的:factory() 和服务是这样的:new service()。在 JS 中,构造函数可以return任何你想要的东西。
工厂和服务只是创建服务对象实例的两种略有不同的方式。
工厂函数return实例本身。
服务函数是一个构造函数,与 new
(或类似的东西)一起使用来创建实例。 JS中的构造函数可以return直接实例化的对象实例(而不是默认的this
、read more)。
这应该让你这样做:
.service('BookService', function() {
var bookService;
function add() {}
function remove() {}
function getAll() {}
bookService = {
add: add,
remove: remove,
getAll: getAll
}
return bookService;
})
所以是的,factory
和 service
可以以完全相同的方式运行,因为这个 JS 怪癖。
我真的不知道你为什么要对两者使用相同的配方,因为从语义上讲它们做的是相同的,为什么不在这种情况下使用特定服务创建所有服务呢?