AngularJS控制器不是函数,未定义(来自工厂的数据)

时间:2017-03-09 15:09:55

标签: javascript angularjs angularjs-controller angularjs-factory

我正在重构旧的AngularJS项目,因此它不那么愚蠢和糟糕,将控制器与工厂分离,而不是将所有数据都放在一个巨型控制器中。不幸的是,我不能走得很远,因为我的主控制器不起作用。我已经广泛搜索过,我所看到的问题都没有与我的相符。我也是由高级开发人员运行的,他无法找到问题。任何帮助深表感谢。该应用程序在我的重构工作之前确实有效。

我的index.html:

<!DOCTYPE html>
<html ng-app="campSpots">
<head>
<meta charset="utf-8">
<title>Camp Spots</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.2/css/bootstrap.min.css" integrity="sha384-y3tfxAZXuh4HwSYylfB+J125MxIs6mR5FOHamPBG064zB+AFeWH94NdvaCBm8qnd" crossorigin="anonymous">
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body ng-controller="mainCtrl">

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.js"></script>
<script type="text/javascript" src="js/app.js"></script>
<script type="text/javascript" src="components/main.ctrl.js"></script>
</body>
</html>

我的工厂:

(function(){
"use strict";
  angular
   .module("campSpots")
   .factory("postFactory", function($http){
    function getPosts(){
    return $http.get('data/posts.json');
  };
  return {
    getPosts: getPosts
  };
 })
})

我的控制器,main.ctrl.js:

(function(){
"use strict";
angular
   .module("campSpots")
      .controller("mainCtrl", mainCtrl);

      mainCtrl.$inject = ['$scope', '$http', 'postFactory'];

      function mainCtrl($scope, $http, postFactory){
    postFactory.getPosts().then(function(posts){
      $scope.posts = posts.data;
    })
  }
})

1 个答案:

答案 0 :(得分:1)

您忽略了为控制器和工厂调用IIFE中的函数。

他们应该这样:

(function(){
    ///code
}());

代码中缺少最后一个(),因此实际上并没有运行代码块。