5

$ mdDialogではじめて動作します。外部HTMLテンプレートを使用してダイアログを作成するために使用されています。

これまでのところ、とてもうまくいっています...作品テンプレートは開かれますが、HTMLのクリックはもうできません。

私はそれの理由を見つけることができません。

<md-icon 
     layout="row" 
     flex md-font-set="material-icons" 
     class="active" 
     ng-click="vm.showMenu($event)"> 
    menu 
</md-icon> 

UserControllerでの$ mdDialogを開くための方法:

mdDialogは、このようUserControllerでで呼び出さ

vm.showMenu = function showMenu(ev){ 

    $mdDialog.show({ 
     controller: MenuDialogController, 
     templateUrl: 'app/components/head/user/menu.dialog.html', 
     parent: angular.element($document.body), 
     targetEvent: ev, 
     clickOutsideToClose:true, 
     fullscreen: $scope.customFullscreen // Only for -xs, -sm breakpoints. 
    }) 
     .then(function(answer) { 
      $scope.status = 'You said the information was "' + answer + '".'; 
     }, function() { 
      $scope.status = 'You cancelled the dialog.'; 
     }); 
}; 

をそして、これは、ダイアログ、ボタンのダイアログのコントローラでありますは動作していません:

angular 
    .module('trax') 
    .controller('MenuDialogController', MenuDialogController); 

function MenuDialogController() { 

    var vm = this; 

    vm.close = function close(){ 
     alert('close clicked'); 
    } 

    vm.ok = function ok(){ 
     alert('ok clicked'); 
    } 

} 

これはdiaのhtmlコードですlogController:

<md-dialog aria-label="User Menu"> 
    <form ng-cloak> 
     <md-toolbar> 
      <div class="md-toolbar-tools"> 
       <h2>User Menu</h2> 
       <span flex></span> 
       <md-button class="md-icon-button" ng-click="vm.close($event)"> 
        <md-icon md-font-set="material-icons">close</md-icon> 
       </md-button> 
      </div> 
     </md-toolbar> 

     <md-dialog-content> 
      <div class="md-dialog-content"> 
       <h2>Dialog Title</h2> 
       <p>Dialog Text....</p> 
       <p ng-click="vm.test($event)">test</p> 
      </div> 
     </md-dialog-content> 

     <md-dialog-actions layout="row"> 
      <md-button href="http://en.wikipedia.org/wiki/Mango" target="_blank" md-autofocus> 
       More on Wikipedia 
      </md-button> 
      <span flex></span> 
      <md-button ng-click="vm.close($event)"> 
       cancel 
      </md-button> 
      <md-button ng-click="vm.ok($event)"> 
       ok 
      </md-button> 
     </md-dialog-actions> 
    </form> 
</md-dialog> 

ng-clicksは動作していません!

私には何かヒントはありますか?

+0

があなたの代わりにコードスニペットとして、これらのファイルを追加することができます$mdDialog.showヘルパーメソッドでcontrollerAs: "vm"を宣言するに等しい$scope

$scope.close = function() { ... }; $scope.ok = function() { ... }; 

ように直接メソッドを宣言するのですか?あなたのコードを見るために、他の人がその特定のURLに移動する必要がなくなります。また、[tag:angle-material]タグの代わりに[tag:anglejs-material]タグを使用してください。 – Edric

+0

あなたはplunkerでデモプロジェクトを作成できますか? – Vishal

+0

こんにちは、あなたのrouteConfigurationを表示できますか? –

答えて

1
angular 
    .module('trax') 
    .controller('MenuDialogController', MenuDialogController); 

function MenuDialogController() { 

    var vm = this; 

    //Here change vm to $scope 
    $scope.close = function close(){ 
     alert('close clicked'); 
    } 

    $scope.ok = function ok(){ 
     alert('ok clicked'); 
    } 

} 

あなたはそれがthetセットアップそれ少しオフに表示され、ダイアログコントローラ

+0

OKI、これは動作しますが、イベントは次のように実装されます:ng-click = "close($ event)" ng-click = "ctrl.close($ event)"のようなものなら、ダイアログをもう一度閉じる方法は?私のコントローラの範囲内でthis.hide()は機能しません – n00n

+0

$ scope.close = function close(){...} これはエラーです... $ scopeにプロパティを設定しないでくださいコントローラで。 controllerAs構文を使用して、 "this"にデータを追加してください – n00n

+0

このようなエラーはありません。それはあなたが使いたいものを個人的に選択します。直接スコープとしてのコントローラ。だからあなたが好きなものだけを使う。 – Hey24sheep

0

の$スコープにあなたのfuncsを割り当てる必要があります。実際、このダイアログにスコープを渡したいと思うようです。 $mdDialog docsでの例から取った私は、あなたがこのパターンに一致するように実装を変更する必要がありますように見えます...

// Dialog #3 - Demonstrate use of ControllerAs and passing $scope to dialog 
//    Here we used ng-controller="GreetingController as vm" and 
//    $scope.vm === <controller instance=""> 

次を見つけることができました。指定されたscopepreserveScopeオプション次...

$mdDialog.show({ 
    controller: MenuDialogController, 
    templateUrl: 'app/components/head/user/menu.dialog.html', 
    parent: angular.element($document.body), 
    targetEvent: ev, 
    clickOutsideToClose:true, 
    fullscreen: $scope.customFullscreen, 
    scope: $scope,   // use parent scope in template 
    preserveScope: true, // do not forget this if use parent scope 
}).then(function(answer) { 
    $scope.status = 'You said the information was "' + answer + '".'; 
}, function() { 
    $scope.status = 'You cancelled the dialog.'; 
}); 

お知らせをお試しください。あなたのコードを残して

// Since MenuDialogController is instantiated with ControllerAs syntax 
// AND we are passing the parent '$scope' to the dialog, we MUST 
// use 'vm.<xxx>' in the template markup 
+0

私もそれを見ました。しかし、私のMenuDialogControllerで約束を放つ方法を教えてください。 scope/rootスコープでイベントを発生させ、MenuDialogControllerでそれを監視しますか? – n00n

+0

わかりません。しかし、あなたの問題を再現する[plunker](https://plnkr.co/)を提供できれば、私は喜んでそれを解決するのを手伝ってくれるでしょう。 – scniro

+0

thx。それは働いていますが、私のユニットテストは上記のように失敗します。 – n00n

1

は、あなたがあなたのテンプレートで使用することができます。このように

var vm = this; 
$scope.vm = vm; 

var vm = this; 

後に追加する必要が変更されていません。

もう一つの方法は、第1の方法は

関連する問題