[英]Simple factory call giving error in AngularJs
在一个简单的示例中,我希望控制台对我“美国”执行ping操作。 相反,我得到一个错误。 有人可以帮忙解决吗?
片段:
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.8/angular.min.js"></script>
</head>
<body ng-app="myApp" ng-controller="myCtrl">
<script>
//module declaration
var app = angular.module('myApp',[]);
//controller declaration
app.controller('myCtrl',function($scope, myFactory){
var a = myFactory();
console.log(a.country);
});
//factory declaration
app.factory('myFactory',function(){
var obj = {};
obj.country = "USA";
return obj;
});
</script>
</body>
</html>
错误:
尝试这个
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.8/angular.min.js"></script>
<body ng-app="myApp" ng-controller="myCtrl">
<script>
//module declaration
var app = angular.module('myApp',[]);
//controller declaration
app.controller('myCtrl',function($scope, myFactory){
var a = myFactory;
console.log(a.country);
});
app.factory('myFactory',function(){
var obj = {};
obj.country = "USA";
return obj;
});
</script>
</body>
正如运行时告诉您的那样,myFactory不是函数。
var a = myFactory();
因此,此调用无效。 你可以这样做。
var a = myFactory;
console.log(a.country);
要不就:
console.log(myFactory.country);
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.8/angular.min.js"></script>
</head>
<body ng-app="myApp" ng-controller="myCtrl">
<script>
//module declaration
var app = angular.module('myApp',[]);
//controller declaration
//factory declaration
app.factory('myFactory',function(){
var obj = {};
return {
get: function(){
obj.country = "USA";
return obj;
},
}
});
app.controller('myCtrl',function($scope, myFactory){
var a = myFactory.get();
console.log(a.country);
});
</script>
</body>
</html>
您可以将替代方式与$injector
//module declaration
var app = angular.module('myApp',[]);
//controller declaration
app.controller('myCtrl',function($scope, $injector){
var a = $injector.get('myFactory')
console.log(a.country);
});
//factory declaration
app.factory('myFactory',function(){
var obj = {};
obj.country = "USA";
return obj;
});
之所以会收到错误,是因为工厂返回了服务对象,并且您试图将其作为函数调用。
检查以下代码段。
angular .module('demo', []) .controller('DefaultController', DefaultController) .factory('demoFactory', demoFactory); DefaultController.$inject = ['demoFactory']; function DefaultController(demoFactory) { console.log(demoFactory.country); } function demoFactory() { var service = { country: 'USA' }; return service; }
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> <div ng-app="demo"> <div ng-controller="DefaultController as ctrl"></div> </div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.