3

私はAngularの世界全体にかなり慣れていませんが、昨日、修正できないように見える問題に遭遇しました。プロトタイプとして、ユーザーがタスクを作成、表示、および削除できるようにする単純なタスク アプリケーションを作成しています。ボタンをクリックしてダイアログを開くと、新しいタスクを作成できます。いくつかの情報を入力でき、[タスクの追加] をクリックすると、タスクがデータベースに追加されます。

唯一の問題は、ダイアログがアイテムのリストを表示する md-list を閉じた後、新しく追加されたタスクを表示するために更新されないことです。ng-repeat の「tack by」オプションを使用してみましたが、うまくいきませんでした。

この質問から情報を得ました: http://stackoverflow.com/questions/27874976/update-a-md-list-dynamically-from-angular

タスクを表示するために使用しているコードはこれです(簡略化)

<html lang="en" ng-app="taskApp">
<head></head>
<body>
    <div ng-controller="TaskController">
        <md-list>
            <md-list-item ng-repeat="task in tasks track by task.id">
                <md-checkbox ng-model="task.checked" ng-change="updateTask(task)" aria-label="Complete Task"></md-checkbox>
                <p>{{ task.title }}</p>
            </md-list-item>
        </md-list>
    </div>
</body>
</html>

ダイアログのテンプレートは次のようになります。

<md-dialog aria-label="Create new task">
    <md-content>
        <md-card class="card-padding">
            <form ng-submit="addTask(newTitle)">
                <h2 class="md-title">Add a new task</h2>
                <div layout="row">
                    <md-input-container flex>
                        <label>Title</label>
                        <input ng-model="newTitle">
                    </md-input-container>
                </div>
                <div layout="row">
                    <md-input-container flex>
                        <md-button class="md-raised md-primary" type="submit" ng-disabled="!newTitle || !newDescription">Add Task</md-button>
                    </md-input-container>
                </div>
            </form>
        </md-card>
    </md-content>
</md-dialog>

コントローラーは次のようになります。

(function(angular) {
    var TaskController = function($scope, $mdDialog, Task) {
        Task.query(function(response) {
            $scope.tasks = response ? response : [];
        });

        $scope.addTask = function(title) {
            new Task({
                title: title,
                checked: false
            }).$save(function(task) {
                $scope.tasks.push(task);
            });
            $scope.newTitle = "";
            $mdDialog.hide();
        };

        $scope.showDialog = function(ev) {
            $mdDialog.show({
                controller: TaskController,
                templateUrl: 'taskdialog.tmpl.html',
                parent: angular.element(document.body),
                targetEvent: ev,
            });
        };

        $scope.updateTask = function(task) {
            task.$update();
        };

        $scope.deleteTask = function(task) {
            task.$remove(function() {
                $scope.tasks.splice($scope.tasks.indexOf(task), 1);
            });
        };
    };

    TaskController.$inject = ['$scope', '$mdDialog', 'Task'];
    angular.module("taskApp.controllers").controller("TaskController", TaskController);
}(angular));

だから私は誰かがこの問題で私を助けることができるかどうか疑問に思っていました.
前もって感謝します!

4

1 に答える 1

3

間違ったスコープでタスク リストにタスクをプッシュしています。

以下はあなたのために仕事をするはずです。ダイアログを表示しながら。

$mdDialog.show({
  controller: TaskController,
  templateUrl: 'taskdialog.tmpl.html',
  parent: angular.element(document.body),
  targetEvent: ev,
}).then(function(task){
  $scope.tasks.push(task);
});

ダイアログを隠している間。

$mdDialog.hide(task);
于 2015-07-14T09:18:47.763 に答える