La página de listado principal tiene un botón de edición. Que abre los detalles de la fila editada.
Way-1: ahora, si configuro "ctrl.parent.q_details.client_location", se vincula con el controlador de listado principal y funciona como un enlace bidireccional y cambia automáticamente los valores como en los cambios del cuadro de edición, lo cual no es un requisito aquí. .
Aquí solo quiero mostrar y permitir editar valores en el cuadro de entrada. No quiero que me cambien en el controlador principal.
► El siguiente es el código en el controlador principal para llamar a mdDialog
$mdDialog.show({ locals:{parent: $scope}, clickOutsideToClose: true, controllerAs: 'ctrl', templateUrl: 'quotation/edit/',//+edit_id, controller: function () { this.parent = $scope; }, });
► El siguiente es el código de la ventana emergente mdDialog.
<md-dialog aria-label=""> <div ng-app="inputBasicDemo" ng-controller="deliverController" layout="column"> <form name="" class="internal_note_cont"> <md-content class="md-padding"> <md-input-container class="md-input-has-value" flex> <label>Client Name</label> <input ng-model="qe.client_name" required > </md-input-container> <md-input-container flex> <label>Client Location</label> <input required ng-model="ctrl.parent.q_details.client_location"> </md-input-container> </md-content> </form> <div> </div> </div> <input type="" required ng-model="ctrl.parent.q_details.recid"> </md-dialog>
Way2: la segunda forma es enviar el valor directamente desde la base de datos sin vincularlo al modelo ng del controlador Dialog (deliverController).
]).controller("deliverController", ["$scope", "$filter","$http","$route","$window","$mdDialog", function ($scope, $filter,$http,$route,$window,$mdDialog) { $scope.qe.client_name = '12345'; // just to test. }
Esto está dando un error de undefine $scope.qe.
Entonces, en última instancia, no puedo enviar datos a mdDialogue y mostrarlos y permitir editarlos de manera normal. Por favor, cualquier tipo angular experimentado que me ayude. Soy nuevo en angular. Estoy intentando diferentes maneras desde hace 2 días.
Este chico siempre tiene la respuesta correcta: https://github.com/angular/material/issues/455#issuecomment-59889129
En breve:
$mdDialog.show({ locals:{dataToPass: $scope.parentScopeData}, clickOutsideToClose: true, controllerAs: 'ctrl', templateUrl: 'quotation/edit/',//+edit_id, controller: mdDialogCtrl, }); var mdDialogCtrl = function ($scope, dataToPass) { $scope.mdDialogData = dataToPass }
Pase la variable usando el atributo locals en el objeto que pasa. Estos valores se inyectarán en el controlador, no en el $scope . Además, pasar todo el alcance de $ del padre podría no ser una buena idea, ya que derrota el paradigma de alcance aislado.
HTML
<md-button ng-click='vmInter.showDialog($event,_dataToPass)'> <i class="fa fa-custom-edit" aria-hidden="true"></i> </md-button>
js
function _showSiebelDialog(event,_dataToPass) { $mdDialog.show({ locals:{dataToPass: _dataToPass}, //here where we pass our data controller: _DialogController, controllerAs: 'vd', templateUrl: 'contentComponents/prepare/views/Dialog.tmpl.html', parent: angular.element(document.body), targetEvent: event, clickOutsideToClose: true }) .then( function(answer) {}, function() { } ); }; function _DialogController($scope, $mdDialog,dataToPass) { console.log('>>>>>>> '+dataToPass); }
$scope.showPrompt = function(yourObject) { $mdDialog.show({ templateUrl: 'app/views/your-dialog.tpl.html', locals: { callback: $scope.yourFunction // create the function $scope.yourFunction = function (yourVariable) { }, controller: function ($scope, $mdDialog, callback) { $scope.dialog.title = 'Your title'; $scope.dialog.abort = function () { $mdDialog.hide(); }; $scope.dialog.hide = function () { if ($scope.Dialog.$valid){ $mdDialog.hide(); callback($scope.yourReturnValue, likes the return of input field); } }; }, controllerAs: 'dialog', bindToController: true, clickOutsideToClose: true, escapeToClose: true });
};