【问题标题】:angular JS service is null inside the controller角度 JS 服务在控制器内为空
【发布时间】:2013-09-06 12:49:46
【问题描述】:

这是我第一个学习 Angular js 的项目。

我创建了一个控制器(EditEventsController)和一个服务(eventData)。 EditEventController 的代码是

'user strict'
eventsApp.controller("EditEventController",
    function EditEventController($scope,eventData) {
        $scope.saveEvent = function (event, newEventForm, eventData) {
            if (newEventForm.$valid) {
                eventData.save(event);
            }
        }
    });

而eventData服务是

eventsApp.factory('eventData', function ($q, $resource) {
    var resource = $resource('data/event/:id.js', { id: '@id' });
    return {
        getEvent: function () {
            return {...}
        },
        save: function (event) {
            event.id = 999;
            var deferred = $q.defer();

            resource.save(event,
                function (response) { deferred.resolve(response); },
                function (response) { deferred.reject(response); });

            return deferred.promise;
        }
    };
});

我使用这个控制器的HTML页面被命名为newEvent.html,这些是我添加的脚本

<script src="lib/angular/angular.js"></script>
    <script src="lib/angular/angular-sanitize.js"></script>
    <script src="lib/angular/angular-resource.js"></script>

    <script src="js/app.js"></script>
    <script src="js/controllers/EditEventController.js"></script>
    <script src="js/services/EventData.js"></script>

    <script src="js/filters.js"></script>

当我试图打电话给eventData.save(event) 时。在 EditEventsController 内部它给了我一个错误,因为 eventData 在那里是 null,因此我无法调用 save() 函数。

控制台中的完整错误是

TypeError: Cannot call method 'save' of undefined
    at Object.EditEventController.$scope.saveEvent (http://localhost:9669/app/js/controllers/EditEventController.js:6:27)
    at elementFns (http://localhost:9669/app/lib/angular/angular.js:6365:19)
    at ngEventDirectives.(anonymous function) (http://localhost:9669/app/lib/angular/angular.js:12987:13)
    at Object.$get.Scope.$eval (http://localhost:9669/app/lib/angular/angular.js:8057:28)
    at Object.$get.Scope.$apply (http://localhost:9669/app/lib/angular/angular.js:8137:23)
    at Object.ng.config.$provide.decorator.$delegate.__proto__.$apply (http://localhost:9669/app/newEvent.html:855:30)
    at HTMLButtonElement.ngEventDirectives.(anonymous function) (http://localhost:9669/app/lib/angular/angular.js:12986:17)
    at event.preventDefault (http://localhost:9669/app/lib/angular/angular.js:1992:10)
    at Array.forEach (native)
    at forEach (http://localhost:9669/app/lib/angular/angular.js:130:11)

我在这里做错了什么?我确定这是小事

【问题讨论】:

    标签: angularjs angularjs-service angularjs-controller


    【解决方案1】:

    想指出user strict 也不会触发 ECMA V5 编译器检查,因为它有错字。你可能知道应该是use 而不是user

    当遇到新的未声明的变量时,此更改将引发错误,而不是创建一个您可能不知道的新全局以及其他好处。可能很容易发现这个问题。

    【讨论】:

      【解决方案2】:

      根据我的说法,下面应该可以工作,因为您在可能无法正确传递的内部函数中再次覆盖 eventData。

      'user strict'
      eventsApp.controller("EditEventController",
          function EditEventController($scope,eventData) {
              $scope.saveEvent = function (event, newEventForm) {
                  if (newEventForm.$valid) {
                      eventData.save(event);
                  }
              }
          });
      

      【讨论】:

        猜你喜欢
        • 2015-08-17
        • 2015-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-18
        • 2018-04-08
        • 2014-01-03
        • 1970-01-01
        相关资源
        最近更新 更多