1

モーダル ウィンドウを使用しようとしています ( http://angular-ui.github.io/bootstrap/を参照)。

親コントローラーには、次の機能があります。

    $scope.open = function () {

        var modalInstance = $modal.open({
            templateUrl: 'myModalContent.html',            
            controller: ModalInstanceCtrl,
            resolve: {
            year: function () {
                return $scope.year.value;
            },
            month: function () {
                return $scope.month;
            },
            day: function () {
                return $scope.day.name;
            },
            todos: function () {
                return $scope.day.toDoItems;
            }
        },
        backdrop: 'static'
    });

    modalInstance.result.then(function (todos) {
        angular.forEach(todos, function (todo) {
            if (todo.New)
                $scope.day.toDoItems.push(todo);
        });            
    }, function () {
        $log.info('Modal dismissed at: ' + new Date());
    });
};

また、モーダル コントローラーには addTodo 関数があります。

var ModalInstanceCtrl = function ($scope, $modalInstance, year, month, day, todos) {
...
    $scope.todos = todos; 
    $scope.addTodo = function () {
        $scope.todos.push({ TodoText: $scope.todoText.value, Done: false, Del: false, Date: new Date(year, month, day), Priority: 1, New: true});
        $scope.todoText.value = "";
    };
...
$scope.ok = function () {
    $modalInstance.close($scope.todos);
    };
};

親ビューには、todos日ごとのカレンダーが表示されます。日のヘッダーをクリックすると、モーダル ウィンドウが開き、ToDo を追加できます。私の問題は、モーダル ウィンドウに todo をtodos追加すると、同時に親ビューにも追加されることです。現在、todos親ビューに 2 回追加されています。1 回はモーダル ビューに追加され、1 回はモーダル ビューで [OK] をクリックします。todosしかし、モーダル ビューで [OK] をクリックしたときにのみ、項目を親ビューに追加したいと考えています。

これに対する解決策はありますか?前もって感謝します!

Plunker でその仕組みを確認できます: http://plnkr.co/edit/Nr1h7K3WZyWlRlrwzhM3?p=info

4

1 に答える 1

2

モーダル コントローラーの解決オブジェクトでは、実際には親のスコープ todos オブジェクトを参照として渡しているため、モーダルのコントローラーでそれを割り当てると、実際には親のスコープ変数$scope.todos = todos;を指します。todos変数への参照の代わりに、親の todo のコピーを返すことができます。

todos: function () {
    return angular.copy($scope.day.toDoItems);
}

http://plnkr.co/edit/Ty10C8JOKHlwb2bWA89r?p=info

于 2013-10-04T14:04:57.500 に答える