2016-12-08 2 views
0

в угловом 1,5 компонента Я показывающий материал mdDialog, который сам по себе имеет встроенный компонент:Закрытие Угловое 1.5 Материал mdDialog от контроллера

   $mdDialog.show({ 
         controller: function($scope, $log) { 
          $scope.notify=function() { 
          $log.debug("need to cancel"); 
          $mdDialog.hide(); 
          } 
         }, 
         template: "<md-dialog aria-label='Add Foobar'><new-foobar-panel on-cancel='notify()'></new-foobar-panel></md-dialog>", 
         targetEvent: ev, 
         clickOutsideToClose: true, 
         fullscreen: true 
        }); 

Когда встроенный компонент вызывает onCancel() обратного вызова, диалог в контроллер замыкает в диалоговом окне, используя $mdDialog.hide().

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

Я попытался это:

   var dialog = $mdDialog.show({ 
         controller: function($scope, $log) { 
          $scope.notify=function() { 
          $log.debug("need to cancel"); 
          dialog.hide(); 
          } 

Но это не работает; возможно, обещание возвращается вместо диалога.

Так что я застрял с вызовом $mdDialog.hide() (глобальный сервис!) И надеюсь, что это относится к диалоговому окну, с которым я работаю? (Это не очень хорошая модульность.)

ответ

0

На самом деле documentation говорит

// Close the specified dialog instance and resolve with 'finished' flag 
// Normally this is not needed, just use '$mdDialog.hide()' to close 
// the most recent dialog popup. 

function closeAlert() { 
    $mdDialog.hide(alert, "finished"); 
    alert = undefined; 
} 

где alert это диалоговое экземпляр ранее строить. Поэтому, если вам действительно нужно обратиться к конкретному экземпляру диалога, а не последнему, вы можете использовать вышеуказанный метод, чтобы закрыть его.

+0

О, я понял! Я пропустил это. Только то, что я искал. Спасибо! –

+0

Очень странно: когда я использую '$ mdDialog.hide (диалог,« закончен »)', '.then (function (answer)' никогда не вызывается! Я установил точку останова и все, но он никогда не попадает в нее. продолжайте? –

+0

На самом деле кажется, что '$ mdDialog.cancel (dialog)' разрешит обещание, но не '$ mdDialog.hide (dialog)'! Я могу получить '$ mdDialog.hide()' для разрешения диалога , но не '$ mdDialog.hide (dialog)'. Конечно, есть что-то, что я делаю неправильно. Любые идеи? –

Смежные вопросы