AngularJS)TypeError:serviceName.functionName()不是函数

问题描述 投票:0回答:2

我想做“取消点击后返回”功能。

这是视图代码

<div ng-controller="goodCtrl">    
<button class="btn" ng-click="cancel()">Cancel</button>
</div>

这是Js代码

1)控制器

function goodCtrl($scope, $log, goodService)
    $scope.cancel = function(){
        $log.debug("goodCtrl - cancel");
        goodService.cancel($scope);
    };

2)服务

function goodService($log, $state)
    var methods = {
       cancel: function($scope) {
           $log.debug("goodService - cancel");
           $state.go('goback');
       }
    }

3)模块

angular
    .module('goodmodule')
    .controller('goodCtrl', goodCtrl)
    .service('goodService', goodService)

但是我遇到了这个问题

TypeError:serviceName.functionName()不是函数

虽然有这么多的控​​件,服务,方法,但我添加的服务和控制器都不可用。我错过了什么?

javascript html angularjs model-view-controller
2个回答
0
投票

正如你已经使用service定义了要暴露的this寄存器方法

function goodService($log, $state) {
    this.cancel = function ($scope) {
        $log.debug("goodService - cancel");
        $state.go('goback');
    }
}

我还建议你使用Dependency Annotation,这里我使用了$inject属性注释

 goodCtrl.$inject = ['$scope', '$log', 'goodService'];
 goodService.$inject = ['$log', '$state'];

0
投票

在angularjs中,要定义服务,您必须在服务函数中为此关键字指定属性。因为在角度js中构造函数用于创建自定义服务.Below代码是您更新的服务代码。

    function goodService($log, $state) {
    this.cancel = function ($scope) {
        $log.debug("goodService - cancel");
        $state.go('goback');
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.