简体   繁体   English

简单的工厂调用会导致AngularJs中出现错误

[英]Simple factory call giving error in AngularJs

In a simple example, I am expecting console to ping me "USA". 在一个简单的示例中,我希望控制台对我“美国”执行ping操作。 Instead I am getting an error. 相反,我得到一个错误。 Can someone help fix it? 有人可以帮忙解决吗?

SNIPPET: 片段:

<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> 

Error: 错误:

在此处输入图片说明

try this 尝试这个

<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> 

As the runtime is telling you, myFactory is not a function. 正如运行时告诉您的那样,myFactory不是函数。

var a = myFactory();

This call is therefore not valid. 因此,此调用无效。 You can do this. 你可以这样做。

var a = myFactory;
console.log(a.country);

Or just: 要不就:

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> 

you can use the alternate way with $injector 您可以将替代方式与$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;
});

You get the error because the factory returns a service object and you're trying to invoke it as a function. 之所以会收到错误,是因为工厂返回了服务对象,并且您试图将其作为函数调用。

Check the below code snippet. 检查以下代码段。

 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM