1

私はAngularJSを始めたばかりで、サービスの作成を理解しようとしています。thisthisから、私の理解では、変数への変更が Angular 内にある限り、それらを $watch する必要はありません。hereからコードをコピーし、最初のサービスが機能するかどうかを確認するために修正しました。

myApp.factory('ListService', function() {
    var ListService = {};
    var list = ['a', 'b', 'c'];
    ListService.addItem = function(item) { list.push(item); }
    ListService.size = function() { return list.length; }
    ListService.size1 = list.length;
    return ListService;
});

function Ctrl1($scope, ListService) {
    $scope.message = ListService.size();
    $scope.addItem = function(){
        ListService.addItem('d');
        console.log("size() is " + ListService.size());
        console.log("size1 is " + ListService.size1);
    }
}

function Ctrl2($scope, ListService) {
    $scope.message = ListService.size1;
}

htmlは単純です:

<div ng-controller="Ctrl1"> Count is: {{ message }} 
    <input type="button" ng-click="addItem">
</div>

<div ng-controller="Ctrl2"> Count is: {{ message }} 
</div>

ボタンをクリックすると、コンソール ログに正しいカウントが表示されますが、「メッセージ」は変わりません。元のコードは考案されたものであり、サービスを使用してコントローラー間でコードを共有できることを示すことを目的としていました。

私の質問は、なぜこれが機能しないのですか? 非常に単純なことを見逃していたら申し訳ありません。私は初心者で、まだコツをつかもうとしています。

4

1 に答える 1

0

その代わり

$scope.message = ListService.size();

試す

$scope.getCount = function () {
    return ListService.size();
};

そして、ビューで:

Count is: {{getCount()}} 

これは、 $scope.message がコントローラーの初期化時の ListService のサイズを含むプリミティブ値であるためです。

(私は英語を話すのが本当に苦手なので、短い答えでごめんなさい)。

于 2013-04-01T12:07:46.787 に答える