【问题标题】:Simple factory call giving error in AngularJsAngularJs中的简单工厂调用给出错误
【发布时间】:2016-09-26 13:24:17
【问题描述】:

在一个简单的例子中,我希望控制台能 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> 

错误:

【问题讨论】:

    标签: javascript angularjs factory


    【解决方案1】:

    试试这个

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

    【讨论】:

      【解决方案2】:

      正如运行时告诉你的那样,myFactory 不是一个函数。

      var a = myFactory();
      

      因此,此调用无效。你可以这样做。

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

      或者只是:

      console.log(myFactory.country);
      

      【讨论】:

        【解决方案3】:
            <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> 
        

        【讨论】:

          【解决方案4】:

          您可以使用 $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;
          });
          

          【讨论】:

            【解决方案5】:

            您收到错误是因为工厂返回了一个服务对象,而您正试图将其作为函数调用。

            检查下面的代码sn-p。

            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>

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-10-14
              • 2016-09-16
              • 1970-01-01
              相关资源
              最近更新 更多