【问题标题】:AngularJS $log.debug is not a functionAngularJS $log.debug 不是一个函数
【发布时间】:2015-09-12 13:11:27
【问题描述】:

我有点沮丧,因为我不知道 AngularJS $log 服务是怎么回事。我不经常使用它,但我让它在我网站的另一部分工作,我认为它不起作用的唯一原因是与 then 函数内的块范围有关。
在我的控制台中尝试运行 $log.debug 时出现以下错误:

TypeError: $log.debug is not a function
    at analysis.client.controller.js:23
    at processQueue (angular.js:14551)
    at angular.js:14567
    at Scope.$get.Scope.$eval (angular.js:15830)
    at Scope.$get.Scope.$digest (angular.js:15641)
    at angular.js:15869
    at completeOutstandingRequest (angular.js:5387)
    at angular.js:5659

这是我的 analysis.client.controller.js 文件:

'use strict';

angular.module('analysis').controller('AnalysisController', ['$scope', '$timeout', '$mdSidenav', '$mdComponentRegistry', '$log', 'Authentication',
    function($scope, $timeout, $mdSidenav, $mdComponentRegistry, $log, Authentication) {
        $scope.user = Authentication.user;

        // Option #1
        //
        // $scope.isOpen = function() { return $mdSidenav('right').isOpen(); };
        // $scope.toggle = function() { $mdSidenav('right').toggle() };


        // Option #2 - See https://github.com/angular/material/issues/974

        $scope.toggle = angular.noop;
        $scope.isOpen = function() {
            return false;
        };

        $scope.toggleLeft = function() {
            $mdSidenav('left').toggle()
                .then(function() {
                    $log.debug('toggle left is done');
                });
        };
    }

]);

提前感谢您的帮助!

【问题讨论】:

    标签: javascript angularjs logging


    【解决方案1】:

    默认情况下不启用调试方法,因为并非所有浏览器都支持console.debug,但您可以在应用的配置阶段使用$logProvider 启用它。

    'use strict';
    
    angular.module('analysis')
      .config(function($logProvider){
        $logProvider.debugEnabled(true);
      })
      .controller('AnalysisController', function(
        $scope,
        $timeout,
        $mdSidenav,
        $mdComponentRegistry,
        $log,
        Authentication
      ) {
        $scope.user = Authentication.user;
    
        // Option #1
        //
        // $scope.isOpen = function() { return $mdSidenav('right').isOpen(); };
        // $scope.toggle = function() { $mdSidenav('right').toggle() };
    
    
        // Option #2 - See https://github.com/angular/material/issues/974
    
        $scope.toggle = angular.noop;
        $scope.isOpen = function() {
          return false;
        };
    
        $scope.toggleLeft = function() {
          $mdSidenav('left').toggle().then(function() {
            $log.debug('toggle left is done');
          });
        };
      });
    

    【讨论】:

      【解决方案2】:

      $logdebug 方法默认是禁用的。您需要从应用配置阶段启用$log,如下所示。

      app.config(function($logProvider){
        $logProvider.debugEnabled(true);
      });
      

      【讨论】:

      • $log 默认情况下是启用的。我尝试在最初没有配置设置的情况下访问.debug,它按预期工作。
      【解决方案3】:

      仅供参考,当我无意中重新分配了调试方法而不是调用它时,我遇到了同样的错误。

      $log.debug = 'My log message'
      

      代替:

      $log.debug('My log message')
      

      浏览到有错误语句的页面后,我会在其他有日志语句的页面上得到"TypeError: $log.debug is not a function"

      【讨论】:

        猜你喜欢
        • 2022-07-01
        • 2014-08-08
        • 2016-05-21
        • 2018-06-27
        • 2015-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-08
        相关资源
        最近更新 更多