Я пытаюсь показать $ 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>