programing

mdDialog에 데이터 전달

closeapi 2023. 3. 27. 21:16
반응형

mdDialog에 데이터 전달


메인 리스트 페이지에 편집 버튼이 있습니다.그러면 편집한 행의 상세 내역이 열립니다.
방법-1: 여기서 "ctrl.parent"를 설정합니다.q_details.client_location"은 부모 리스트컨트롤러와 바인드 되어 양방향 바인딩으로 동작하며 편집박스의 변경과 같이 값이 자동으로 변경됩니다.이거는 여기서 필수가 아닙니다.
여기서 입력란에 값을 표시하고 편집하는 것을 허용합니다.부모 컨트롤러에서 변경을 원하지 않습니다.

§ mdDialog를 호출하기 위한 부모 컨트롤러의 코드를 다음에 나타냅니다.

$mdDialog.show({
                locals:{parent: $scope},                
                clickOutsideToClose: true,                
                controllerAs: 'ctrl',                
                templateUrl: 'quotation/edit/',//+edit_id,
                controller: function () { this.parent = $scope; },
            });

§ 다음은 팝업 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>



방법 2: 두 번째 방법은 Dialog Controller(deliver Controller)의 ng-model에 바인딩 없이 DB에서 직접 값을 보내는 것입니다.

]).controller("deliverController", ["$scope", "$filter","$http","$route","$window","$mdDialog",
    function ($scope, $filter,$http,$route,$window,$mdDialog) {
        $scope.qe.client_name = '12345'; // just to test.        
    }

이는 undefine $scope.qe 오류를 나타내고 있습니다.

따라서 mdDialogue에 데이터를 전송하여 표시할 수 없으며 일반 방법으로 편집할 수 없습니다.각진 남자 경험이 있으신 분 좀 도와주세요.나는 앵글에 익숙하지 않다.나는 이틀 동안 다른 방법을 시도하고 있다.

이 사람은 항상 정답을 알고 있습니다.https://github.com/angular/material/issues/455#issuecomment-59889129

요컨대:

$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  
}

전달 객체의 locals 속성을 사용하여 변수를 전달합니다.이러한 값은 $scope가 아닌 컨트롤러에 주입됩니다.또한 부모의 $scope 전체를 전달하는 것은 고립된 범위 패러다임을 깨기 때문에 그다지 좋은 생각이 아닐 수 있습니다.

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
});

};

ES6 TL;DR 방식

스코프 변수를 사용하여 컨트롤러를 만듭니다.

let showDialog = (spaceApe) => {
    $mdDialog.show({
        templateUrl: 'dialog.template.html',
        controller: $scope => $scope.spaceApe = spaceApe
    })
}

보이라spaceApe이제 대화 템플릿에서 사용할 수 있습니다.

<md-dialog>
    <md-dialog-content>
        <span> {{spaceApe | json}} </span>
    <md-dialog-content>
<md-dialog>
    

이 방법은 효과가 있었습니다.

        confirmNewData = function() {
        let self = this;
        this.$mdDialog.show({                
            templateUrl: '/dist/views/app/dialogConfirmAFEData.html',
            controllerAs: "ctrl",                                
            controller: $scope => $scope = { $mdDialog: self.$mdDialog, 
                                             data: self.FMEData, 
                                             cancel: function() { this.$mdDialog.cancel(); }, 
                                             confirm: function() { this.$mdDialog.hide(); }  
                                           },
            clickOutsideToClose: false
        }).then(function() {
            // User Accepted!!
            console.log('You accepted!!!');
        }, function() {
            // User cancelled, don't do anything.
            console.log('You cancelled!!!');
        });
    };

그리고 시야에서...

<md-dialog aria-label="Start New AFE" style="min-width: 50%;">
    <md-toolbar>
      <div class="md-toolbar-tools">
        <h2>GIS Data...</h2>          
      </div>
    </md-toolbar>
    <md-dialog-content>
        <div layout="column" layout-padding>
            <li/>Lease: {{ ctrl.data.LEASE }}    
            <li/>Reservoir: {{ ctrl.data.RESERVOIR }}    
        </div>
    </md-dialog-content>

    <md-dialog-actions layout="row">
      <md-button class="md-button" ng-click="ctrl.cancel()">Cancel</md-button>
      <md-button class="md-button" ng-click="ctrl.confirm()">Yes</md-button>                
    </md-dialog-actions>

언급URL : https://stackoverflow.com/questions/31240772/passing-data-to-mddialog

반응형