2017-05-03 1 views
0

내 웹 응용 프로그램에서 md-dialog을 닫은 후 내 목록의 값을 변경하고 싶습니다. 즉 처음에는 행을 클릭 한 다음 각도 재료로 정의 된 대화 상자를 엽니 다. 이 호출 된 객체에서 값을 변경하고 "확인"을 클릭하면 값이 목록에서 업데이트되어야합니다. 현재 비동기로 작동합니다. 대화 상자보기에서 값을 변경하면 "확인"을 클릭하기 전에 값이 목록에서 즉시 변경됩니다.대화 상자를 닫은 후 값을 변경하는 방법 (각도 재료)?

//Main view: 

    <div class="md-padding"> 
     <p>{{c.txtSample}}</p> 

     <md-button class="md-raised md-primary" ng-click="fc.openDialog(c.txtSample)"> 
      Klick 
     </md-button> 
    </div> 


//dialog view: 
<div class="md-dialog-container"> 
    <md-dialog> 
     <md-dialog-content class="md-dialog-content"> 
      <md-input-container class="md-block"> 
       <label>Sample text</label> 
       <input ng-model="c.textInput" /> 
      </md-input-container> 
     </md-dialog-content> 

     <md-dialog-actions> 
      <md-button class="md-raised" ng-click="c.klickOK(c.textInput)"> 
       OK 
      </md-button> 
     </md-dialog-actions> 
    </md-dialog> 
</div> 

//MainCtrl 
vm.txtSample = 'Change the inputtext.'; 
vm.openDialog = openDialog; 

     function openDialog(item) { 
      $mdDialog.show({ 
       parent: angular.element(document.body), 
       templateUrl: 'App/views/testDialog.html', 
       controller: function TestCtrl($scope, sampleTxt) { 
        var vm = this; 

        vm.textInput = sampleTxt; 
        vm.klickOK = klickOK; 

        function klickOK(item) { 
         $mdDialog.hide(item); 
        } 
       }, 
       controllerAs: 'c', 
       preserveScope: true, 
       locals: { 
        sampleTxt: item 
       } 
      }).then(function (item) { 
       vm.txtSample = item; 
      }, function() { 
       alert('Abgebrochen'); 
      }); 
     } 

그러나이 작동하지 않습니다 목록 값 : 나는 당신이 아래의 코드에서 볼 수 있듯이 작동하는 하나의 변수로 내 접근 방식을 테스트

. 이유를 모르겠다 ... 선택된 행을 가진 코드 예제는 다음과 같습니다.

//Main view: 
<div class="md-padding"> 
    <div ng-repeat="wert in fc.werteliste track by $index"> 
     <span flex="20">{{wert.wert1}}</span> 
     <span flex="20">{{wert.wert2}}</span> 
     <span flex="40">{{wert.wert3}}</span> 

     <md-button class="md-raised md-primary" ng-click="fc.openDialog(wert)"> 
      Klick 
     </md-button> 
    </div> 
</div> 

//Dialog view: 
<div class="md-dialog-container"> 
    <md-dialog> 
     <md-dialog-content class="md-dialog-content"> 
      <md-input-container class="md-block"> 
       <label>Wert 1</label> 
       <input ng-model="c.textInput.wert1" /> 
      </md-input-container> 

      <md-input-container class="md-block"> 
       <label>Wert 2</label> 
       <input ng-model="c.textInput.wert2" /> 
      </md-input-container> 

      <md-input-container class="md-block"> 
       <label>Wert 3</label> 
       <input ng-model="c.textInput.wert3" /> 
      </md-input-container> 
     </md-dialog-content> 
     <md-dialog-actions> 
      <md-button class="md-raised" ng-click="c.klickOK(c.textInput)"> 
       OK 
      </md-button> 
     </md-dialog-actions> 
    </md-dialog> 
</div> 

//MainCtrl: 
vm.openDialog = openDialog; 

     function openDialog(item) { 
      $mdDialog.show({ 
       parent: angular.element(document.body), 
       templateUrl: 'App/views/testDialog.html', 
       controller: function TestCtrl($scope, objItem) { 
        var vm = this; 

        vm.textInput = objItem; 

        vm.klickOK = klickOK; 
        function klickOK(item) { 
         $mdDialog.hide(item); 
        } 
       }, 
       controllerAs: 'c', 
       preserveScope: true, 
       locals: { 
        objItem: item 
       } 
      }).then(function (item) { 
       //e.g. the first item 
       vm.werteliste[0] = item; 
      }, function() { 
       alert('Abgebrochen'); 
      }); 
     } 

아무도 도와 줄 수 있습니까?!

답변

0

나는) (당신이 취소]를 사용하여 배열의 전면에 항목을 추가하려면 방금

이 또한 어쩌면 $scope.$apply

vm.openDialog = openDialog; 

    function openDialog(item) { 
     $mdDialog.show({ 
      parent: angular.element(document.body), 
      templateUrl: 'App/views/testDialog.html', 
      controller: function TestCtrl($scope, objItem) { 
       var vm = this; 

       vm.textInput = objItem; 

       vm.klickOK = klickOK; 
       function klickOK(item) { 
        $mdDialog.hide(item); 
       } 
      }, 
      controllerAs: 'c', 
      preserveScope: true, 
      locals: { 
       objItem: item 
      } 
     }).then(function (resultItem) { 
      //e.g. the first item 
      item = resultItem; 

      $scope.$apply(); // maybe its unnecessary 
     }, function() { 
      alert('Abgebrochen'); 
     }); 
    } 
1

필요 item openDialog하는 결과 item을 할당 할 수 있다고 생각 메서드를 사용하여 배열의 맨 앞에 항목을 추가합니다. vm.werteliste.unsift (item); 나는이 문제를 의심

당신이 대화 상자에 WERT를 전달하고

을하는 데 도움이

희망을 fc.werteliste하지 않는 것입니다

관련 문제