【问题标题】:Service not in scope from within an Angular event handler服务不在 Angular 事件处理程序的范围内
【发布时间】:2014-06-11 05:18:44
【问题描述】:

在学习了 JavaScript 和 jQuery 之后,我决定学习 Angular.js,但我发现这有点困难。这是我的代码。

index.html:

<html>
    <head>
        <title>Resolute</title>
        <script src="js/angular 1.3.0-beta9/angular.js" type="text/javascript"></script>
        <script src="js/index.js" type="text/javascript"></script>
    </head>
    <body ng-app="resoluteApp">
        <form novalidation ng-controller="resoluteCtrl" ng-submit="submit()">
            <button type="submit">Submit</button>
        </form>
    </body>
</html>

index.js:

var app = angular.module('resoluteApp', []);

app.service('resoluteService', function myService() {
    this.bar = function() { return 'resolute'; };
});

app.controller('resoluteCtrl', function($scope) {
        $scope.submit = function() {
            alert(resoluteService.bar());  // resoluteService is undefined here
        };
    });

我希望能够从ng-submit 事件处理程序$scope.submit() 中调用服务resoluteService 中定义的函数bar()。按提交按钮后,我在控制台中收到以下错误(Chrome 35.0.1916.153):

ReferenceError: resoluteService is not defined
    at Scope.$scope.submit (http://localhost:8383/resolute/js/index.js:9:19)
    at http://localhost:8383/resolute/js/angular%201.3.0-beta9/angular.js:10797:21
    at http://localhost:8383/resolute/js/angular%201.3.0-beta9/angular.js:19791:17
    at Scope.$eval (http://localhost:8383/resolute/js/angular%201.3.0-beta9/angular.js:12699:28)
    at Scope.$apply (http://localhost:8383/resolute/js/angular%201.3.0-beta9/angular.js:12797:23)
    at HTMLFormElement.<anonymous> (http://localhost:8383/resolute/js/angular%201.3.0-beta9/angular.js:19790:21)
    at http://localhost:8383/resolute/js/angular%201.3.0-beta9/angular.js:2860:10
    at forEach (http://localhost:8383/resolute/js/angular%201.3.0-beta9/angular.js:327:20)
    at HTMLFormElement.eventHandler (http://localhost:8383/resolute/js/angular%201.3.0-beta9/angular.js:2859:5) 

由于我仍在努力理解 Angular 的做事方式,我不确定如何将 resoluteService 或其中的函数 bar 引导到 $scope.submit 的范围内。可能是我以完全错误的方式思考它,或者它可能只是我缺少的一些简单的东西。关于如何解决这个问题的任何想法?

【问题讨论】:

    标签: javascript angularjs angular-services


    【解决方案1】:

    您需要将服务注入到控制器中,

    app.controller('resoluteCtrl', function($scope,resoluteService) {
    
    }
    

    【讨论】:

    • 我知道这会很简单......就像一个魅力。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2015-11-28
    • 1970-01-01
    • 2018-08-18
    • 1970-01-01
    • 1970-01-01
    • 2017-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多