簡體   English   中英

Angularjs - 工廠服務無法訪問 $scope 對象

[英]Angularjs - Factory service not able to access $scope objects

基於以下問題的最佳答案: How to call custom Javascript functions from an AngularJS controller? .

我嘗試了以下代碼:

<body ng-app="FDAApp" ng-controller="formController">
<form ng-submit="login()">
    <input type="submit" ng-click="ngSubmit()">
</form>
<script type="text/javascript" >
    var app = angular.module('FDAApp', []);
    angular.module('FDAApp').factory('MyService', function($http) {
        var sessionKey='';
        return {
            sessionKey: sessionKey,
            login: function()
            {
                sessionKey="ABCD";
            }
        }
    });

    app.controller('formController', function ($scope, $http, $templateCache, $interval, $timeout, MyService) {

        $scope.sessionKey = '';
        $scope.sessionKey = MyService.sessionKey;

        $scope.login = function () {
            MyService.login();
            console.log($scope.sessionKey);
        }
    });
</script>
</body>

問題:我無法更新 $scope.sessionKey 的值。 有什么幫助嗎?

當您更改原始對象而不是對象中的屬性時, $scope.sessionKey 將保留在舊會話密鑰中,而新會話密鑰是一個未跟蹤的新實體。 如果您想以這種方式傳播更改,則需要不同的策略。

您可以將 $scope 傳遞給 MyService 以將其從服務中更改,或者將 MyService 直接傳遞到作用域中。

在范圍內傳遞 MyService: http : //jsfiddle.net/3mrwLt65/

$scope.MyService = MyService

MyService.login()

// now $scope.MyService.sessionKey is your session key. 

$scope傳遞給 MyService:

在控制器中:

MyService.login($scope);

在服務中,登錄功能將如下所示:

function(scope) {
   scope.sessionKey = <your session key>
}

您可能還想這樣做。 this.sessionKey = 'ABCD'而不是sessionKey = 'ABCD'

只需反轉您的設計:服務不應更改任何$scope

相反,讓服務更改自己的數據並公開對象引用:

angular.module('FDAApp').factory('MyService', function($http) {
    var session = {
        key: ''
    };

    return {
        session: session,
        login: function()
        {
            session.key = "ABCD";
        }
    }
});

app.controller('formController', function ($scope, $http, $templateCache, $interval, $timeout, MyService) {

    $scope.session = MyService.session;

    $scope.login = function () {
        MyService.login();
        console.log($scope.session.key);
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM