无法从外部js文件访问角度服务

时间:2016-06-22 20:00:08

标签: javascript angularjs dependency-injection angularjs-service angularjs-controller

这是我的HTML:

<html>
<head>
  <link rel="stylesheet" type="text/css" href="css/style.css">
  <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>

</head>
<body>
<script type="text/javascript" src="services.js"></script>
 <div ng-app="myApp" ng-controller="myCtrl2">
   hello {{x}} 
 </div>
 <script>
  var app=angular.module("myApp", []);
  app.controller("myCtrl2", ['$scope','$location', function($scope, $location) {
    myService.set("world");
    $scope.x=myService.get();
  }]);
</script>
</body>
</html> 

这是我的services.js文件:

    var app=angular.module("myApp", []);
    app.factory('myService', function() {
     var savedData = {}
     function set(data) {
       savedData = data;
     }main.html
     function get() {
      return savedData;
    }

    return {
      set: set,
      get: get
    }

  });

为什么我没有得到hello world而是Chrome开发人员工具说:ReferenceError:myService未定义

3 个答案:

答案 0 :(得分:3)

你需要纠正一些事情

  1. 不要在html页面上重新创建myApp模块,这会破坏模块的旧注册组件。而是使用由myApp创建的现有services.js模块。

    var app=angular.module("myApp", []);
    

    应该是

    var app=angular.module("myApp");
    
  2. 在控制器中使用之前,请先注入服务。

    app.controller("myCtrl2", ['$scope','$location', 'myService', 
        function($scope, $location, myService) {
    

答案 1 :(得分:0)

您需要将服务注入控制器。

app.controller("myCtrl2", ['$scope','$location', function($scope, $location,myService) { 

答案 2 :(得分:-1)

您需要在控制器中注入服务

var app=angular.module("myApp", []);
 app.controller("myCtrl2", ['$scope','$location','myService', function($scope, $location,myService) {
  myService.set("world");
  $scope.x=myService.get();
}]);