Angular工厂"is not a constructor"
Angular factory "is not a constructor"
我正在尝试创建一个工厂,但在实例化它时遇到错误。我错过了什么吗?
sessionFactory is not a constructor
at new sessionController (sessionController.js:5)
控制器
angular.module('app').controller('sessionController', ['sessionService', 'sessionFactory', sessionController]);
function sessionController(sessionService, sessionFactory) {
var vm = this;
var mySessionFactory = new sessionFactory();
}
工厂
angular.module('app').factory('sessionFactory', ['$window', sessionFactory]);
function sessionFactory($window) {
return {
save: save,
get: get,
clear: clear
}
function save(key, value) {
$window.sessionStorage.setItem(key, value);
}
function get(key) {
return $window.sessionStorage.getItem(key);
}
function clear() {
$window.sessionStorage.clear();
}
}
HTML
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.min.js"></script>
<script src="./app/app.js"></script>
<script src="./app/sessionController.js"></script>
<script src="./app/sessionService.js"></script>
<script src="./app/sessionFactory.js"></script>
Angular 调用以下工厂函数一次以获得用于注入的单例:
function sessionFactory($window) {
return {
save: save,
get: get,
clear: clear
}
// ...
}
所以你在这个对象上调用 new
:
{
save: save,
get: get,
clear: clear
}
您不必调用 new
,因为您已经拥有所需的对象。
这是这一行的问题
var mySessionFactory = new sessionFactory();
您不必实例化它,只需直接使用它,因为它已经实例化了。
如果你想创建一个工厂的实例,你应该return一个函数如下 -
angular.module('foo', [])
.factory('Foo', ['$http', function($http) {
return function() {
this.x = "Some";
this.y = "value";
this.someFunction = function() {
return this.x + this.y;
};
};
}]);
然后您可以使用 -
实例化它
var factoryObj = new Foo();
如果您 return 使用 object
而不是(构造函数)function
,则无需使用 new
实例化对象。可以直接使用sessionFactory
您可以使用新的 sessionFactory(),sessionFactory 必须 return 函数而不是对象才能用作构造函数。
所以你可以 return 一个匿名函数,它将 return 一个对象。
function sessionFactory($window){
function save(key, value) {
$window.sessionStorage.setItem(key, value);
}
function get(key) {
return $window.sessionStorage.getItem(key);
}
function clear() {
$window.sessionStorage.clear();
}
return function () {
return {
save : save,
get : get,
clear : clear
}
}
}
此实现将正常工作。
我正在尝试创建一个工厂,但在实例化它时遇到错误。我错过了什么吗?
sessionFactory is not a constructor
at new sessionController (sessionController.js:5)
控制器
angular.module('app').controller('sessionController', ['sessionService', 'sessionFactory', sessionController]);
function sessionController(sessionService, sessionFactory) {
var vm = this;
var mySessionFactory = new sessionFactory();
}
工厂
angular.module('app').factory('sessionFactory', ['$window', sessionFactory]);
function sessionFactory($window) {
return {
save: save,
get: get,
clear: clear
}
function save(key, value) {
$window.sessionStorage.setItem(key, value);
}
function get(key) {
return $window.sessionStorage.getItem(key);
}
function clear() {
$window.sessionStorage.clear();
}
}
HTML
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.min.js"></script>
<script src="./app/app.js"></script>
<script src="./app/sessionController.js"></script>
<script src="./app/sessionService.js"></script>
<script src="./app/sessionFactory.js"></script>
Angular 调用以下工厂函数一次以获得用于注入的单例:
function sessionFactory($window) {
return {
save: save,
get: get,
clear: clear
}
// ...
}
所以你在这个对象上调用 new
:
{
save: save,
get: get,
clear: clear
}
您不必调用 new
,因为您已经拥有所需的对象。
这是这一行的问题
var mySessionFactory = new sessionFactory();
您不必实例化它,只需直接使用它,因为它已经实例化了。
如果你想创建一个工厂的实例,你应该return一个函数如下 -
angular.module('foo', [])
.factory('Foo', ['$http', function($http) {
return function() {
this.x = "Some";
this.y = "value";
this.someFunction = function() {
return this.x + this.y;
};
};
}]);
然后您可以使用 -
实例化它var factoryObj = new Foo();
如果您 return 使用 object
而不是(构造函数)function
,则无需使用 new
实例化对象。可以直接使用sessionFactory
您可以使用新的 sessionFactory(),sessionFactory 必须 return 函数而不是对象才能用作构造函数。 所以你可以 return 一个匿名函数,它将 return 一个对象。
function sessionFactory($window){
function save(key, value) {
$window.sessionStorage.setItem(key, value);
}
function get(key) {
return $window.sessionStorage.getItem(key);
}
function clear() {
$window.sessionStorage.clear();
}
return function () {
return {
save : save,
get : get,
clear : clear
}
}
}
此实现将正常工作。