$ scope теряет обновленное значение из ng-модели при отклонении $ mdDialog - PullRequest
0 голосов
/ 29 декабря 2018

Я пытаюсь показать $ mdDialog, который использует тот же контроллер, из которого он был вызван.У меня есть три свойства в $ scope, из которых $ mdDialog будет показывать начальные значения.каждый вход и выбор привязываются к ng-модели соответствующего свойства $ scope.при изменении входного значения ng-модель также изменяется, что и ожидается.Но когда я нажимаю кнопку «Готово» в $ mdDialog, он показывает старое значение $ scope, хотя оно было обновлено из полей ввода.В чем может быть проблема для этого?

диалоговое окно всплывает с правильным значением из $ scope, и если я печатаю его в диалоге с помощью {{newActionLabel}}, оно печатает обновленное значение.Но почему-то он теряет его при вызове addAction.

код контроллера:

app.controller("cardController", function ($scope, $firebaseObject,$routeParams,$mdDialog) {
    $scope.isLoading = true;
    $scope.selectedActionPlatforms = [];
    $scope.platforms = ['ANDROID','IOS','ANY','ANDROID_THINGS'];
    $scope.cardTypes = ['TYPE_1','TYPE_2'];
    $scope.selectedPlatform = 'ANY';
    $scope.selectedCardType = 'TYPE_1';
    $scope.newActionLabel = 'OKAY';
    $scope.newActionUrl = 'https://www.google.com';
    $scope.newActionPlatformType = 'ANY';
    $scope.newActionPrioriy = 0;
    var ref = firebase.database().ref('cards/'+$routeParams.id);
    $scope.expiryDateFormatted = new Date();
    $scope.showAtDateFormatted = new Date();
    $scope.card = $firebaseObject(ref);
    $scope.card.$loaded()
        .then(function () {
            $scope.newActionPrioriy = $scope.card.actions.length+1;
            $scope.expiryDateFormatted = new Date($scope.card.expiry);
            $scope.showAtDateFormatted = new Date($scope.card.showAt);
            $scope.selectedPlatform = $scope.card.platformType;
            $scope.selectedCardType = $scope.card.cardType;
            $scope.isLoading = false;
            $scope.card.actions.forEach(function(action) {
                $scope.selectedActionPlatforms.push(action.platformType);
            });
        })
    $scope.removeImage = function(index){
        $scope.card.images.splice(index,1);
    };
    $scope.removeAction = function (index) {
        $scope.card.actions.splice(index, 1);
    };
    $scope.showAddActionDialog = function (ev) {
        $mdDialog.show({
                controller: 'cardController',
                templateUrl: 'add_action_dialog.html',
                parent: angular.element(document.body),
                targetEvent: ev,
                clickOutsideToClose: true,
                fullscreen: $scope.customFullscreen // Only for -xs, -sm breakpoints.
            })
            .then(function () {
                console.log($scope.newActionLabel,$scope.newActionUrl,$scope.newActionPlatformType,$scope.newActionPrioriy);
            }, function () {
                // cancelled
            });
    };
    $scope.hide = function () {
        $mdDialog.hide();
    };

    $scope.cancel = function () {
        $mdDialog.cancel();
    };

    $scope.addAction = function () {
        $mdDialog.hide();
    };

});

hdml-код md-dialog:

<md-dialog aria-label="Add Action">
    <form ng-cloak>
        <md-toolbar>
            <div class="md-toolbar-tools">
                <h2>Add Action</h2>
                <span flex></span>
                <md-button class="md-icon-button" ng-click="cancel()">
                    <md-icon><i class="material-icons">
                        close
                    </i>
                </md-icon>
                </md-button>
            </div>
        </md-toolbar>

        <md-dialog-content>
            <div class="md-dialog-content" layout="column">
                <md-input-container>
                    <input ng-model="newActionLabel" placeholder="Action Label">
                </md-input-container>
                <md-input-container>
                    <input ng-model="newActionUrl" placeholder="Action URL">
                </md-input-container>
                <md-input-container>
                    <label>Platform Type</label>
                    <md-select ng-model="newActionPlatformType">
                        <md-option ng-repeat="pf in platforms" ng-value="pf">
                            {{pf}}
                        </md-option>
                    </md-select>
                </md-input-container>

            </div>
        </md-dialog-content>

        <md-dialog-actions layout="row">
            <md-button ng-click="addAction()">
                ADD
            </md-button>
        </md-dialog-actions>
    </form>
</md-dialog>
...