AngularJs无法读取属性“”;UpdateTime”;的未定义

AngularJs cannot read property "UpdateTime" of undefined

本文关键字:UpdateTime 未定义 读取 属性 AngularJs      更新时间:2023-09-26

我有以下js控制器:

angular.module('gtApp').controller('settingsController', ["$scope", function($scope, SincService) {
    $scope.CallTime = 5;
    $scope.$watch('CallTime', function() {
        SincService.UpdateTime(CallTime);
    });    
}]); 

以及以下工厂:

angular.module('gtApp').factory('SincService', function ($rootScope) {
    var data = {};
    data.CallTime = 5;
    data.UpdateTime = function(value) {
        this.CallTime = value;
        $rootScope.$broadcast("timeUpdated");
    }
    return data;
});

当控制器中的CallTime变量发生变化时,我想从js控制器调用UpdateTime方法,但我收到的是:Cannot read property 'UpdateTime' of undefined。我已经搜索并阅读了很多关于这个错误的帖子,但我找不到我做错了什么。请给我一些帮助:)。

谢谢!

您忘记用数组表示法声明服务注入。应该是:

angular.module('gtApp').controller('settingsController', ["$scope", "SincService", function($scope, SincService) {
    $scope.CallTime = 5;
    $scope.$watch('CallTime', function() {
        SincService.UpdateTime(CallTime);
    });    
}]);

注意"SincService"字符串作为控制器定义数组的第二个元素。

CallTime应该是来自watch函数的newVal$scope.CallTime,也错过了添加SincService 的依赖项

angular.module('gtApp').controller('settingsController',["$scope",'SincService', function($scope, SincService) {
    $scope.CallTime = 5;
    $scope.$watch('CallTime', function(newVal) {
        SincService.UpdateTime(newVal);
    });    
}]);