4

メインコントローラーをあまり汚染しないように、angularjsアプリの子コントローラー内の親コントローラーからビットを移動しようとしています。単純化されたフィドルは次のとおりです: http://jsfiddle.net/terebentina/5RMPV/ したがって、変更ボタンをクリックすると、3 番目の文字が「X」に変更されます。当初、item_change() 関数はメイン コントローラー内にあり、実行されていましたが$scope.items[idx] = 'X'、これは問題なく機能していました。ただし、ItemCtrl内に移動したため、3番目の要素にアクセスする方法がわかりません。

どんな助けでも大歓迎です。

4

1 に答える 1

6

メイン コントローラーから何かを移動する 1 つの方法は、サービスまたはファクトリ内のコントローラー間でデータを共有し、すべての変更を行うことです (この記事でかなりうまく説明されています)。

ここに更新された fiddleがあります。itemsService項目データにアクセスする任意のコントローラーにを挿入するだけで済みます。

angular.module('test', [])
    .service('itemsService', function(){
        var items = ['A', 'B', 'C', 'D'];

        return{
            getItems: function(){
                return items;
            },
            changeItem: function(index, value){
                items[index] = value;
            }
        }
    })
    .controller('MainCtrl', function($scope, itemsService) {
        $scope.items = itemsService.getItems();       

        $scope.change = function(idx) {
            itemsService.changeItem(idx, 'X');
        }

    })
于 2012-09-07T16:35:25.287 に答える