2017-04-27 7 views
0

私はAngularを初めて使用しており、Angularのui-bootstrapを使用してModal(ポップアップフォーム)を使用したいと考えています。私はAngular bootstrap siteから学んでいます。これは、ポップアップを制御するためにControllerAsを利用していることがわかります。コントローラの角度機能は実行できません

私が直面する問題は、CTRL内の関数であるが、私はすでにそれをより明確にするために正しい値にng-click='ctrl.open()'

を入れていても、ng-clickイベントで実行することができない、私は以下の私のコードを提供します。

Controller.jsでもconsole.log('selected');が発射されていない

'use strict'; 

function funcListEmployeeCtrl($scope) { 
    var ctrl = this; 
    ctrl.items = ['item1', 'item2', 'item3']; 
    ctrl.animationsEnabled = false; 
    console.log(ctrl); 
    ctrl.open = function (size, parentSelector) { 
     console.log('selected'); //this is not fired 
     var parentElem = parentSelector ? 
      angular.element($document[0].querySelector('.change-password-modal-container ' + parentSelector)) : undefined; 
    var modalInstance = $uibModal.open({ 
     animation: ctrl.animationsEnabled, 
     ariaLabelledBy: 'modal-title', 
     ariaDescribedBy: 'modal-body', 
     templateUrl: 'myModalContent.html', 
     controller: 'ModalInstanceCtrl', 
     controllerAs: 'ctrl', 
     size: size, 
     appendTo: parentElem, 
     resolve: { 
      items: function() { 
       return ctrl.items; 
      } 
     } 
    }); 
} 

angular.module('listEmployee') 
    .controller('listEmployeeCtrl', ['$scope', funcListEmployeeCtrl]) 
    .controller('ModalInstanceCtrl', function ($uibModalInstance, items) { 
     var ctrl = this; 
     ctrl.items = items; 
     ctrl.selected = { 
      item: $ctrl.items[0] 
     }; 

     ctrl.ok = function() { 
      $uibModalInstance.close($ctrl.selected.item); 
     }; 

     ctrl.cancel = function() { 
      $uibModalInstance.dismiss('cancel'); 
     }; 
}); 

注意。したがって、その機能はng-clickによってアクセス可能でないと結論付けることができる。

View.html

... 
<tbody> 
    <tr ng-repeat="emp in data.employees|orderBy:orderByField:reverseSort|filter:{ Name: search_value }"> 
     <td>{{emp.SalesmanId}}</td> 
     <td>{{emp.Name}}</td> 
     <td>{{emp.Address}}</td> 
     <td>{{emp.Phone}}</td> 
     <td>{{emp.Email}}</td> 
     <td ng-click='ctrl.open()'>{{emp.Username}}</td> 
     <td>{{emp.Role}}</td> 
    </tr> 
</tbody> 
... 

私は何をしようとしていますが、ユーザがユーザ名のセルをクリックするたびに、モーダル開いています。 $scopeの関数にng-clickを変更しようとしていて、HTMLが正常に動作しています。また、console.log(ctrl);に内容が表示されているので、ctrlオブジェクトが設定されていると確信しています。以下は、ログのスクリーンショットです。

ctrl object

私はデベロッパーツールはChromeから警告しまった注、私は(私は.min.jsなく.mapを使用)それを取り除く方法がわかりません。しかし、私はそれが問題だとは思わない。 enter image description here

どこが間違っているのか分かりません。どんな助けと指導も高く評価されます。

+0

"data.employees"に "ctrl"を付けずにアクセスできる場合は、 "ctrl"に先行することなく "open"にアクセスできることを意味します。あなたは試みることができますか? –

+0

コントローラをどこで使用しているかわかりますか? –

+0

@ GiovaniVercauteren確かに、私は 'modalInstance'を初期化するときに私の質問を更新します。 –

答えて

1

現在のコントローラをmodalControllerと混同しているようです。あなたはcontrollerAs: 'ctrl'をモーダルに宣言していますが、それは現在のコントローラでctrlを使用できるという意味ではありません。

コントローラには、listEmployeeCtrlModalInstanceCtrlという2つのコントローラがあります。 2番目のコントローラ(ModalInstanceCtrl)のみがテンプレートにctrlを使用できます。

listEmployeeCtrlctrlを使用する場合は、ng-controllerディレクティブをview.htmlに追加する必要があります。あなたはcontrollerAs構文を追加することができ、あなたのルートを記述

<div ng-controller="listEmployeeCtrl as ctrl"> 
    ... 
    <tbody> 
     <tr ng-repeat="emp in data.employees|orderBy:orderByField:reverseSort|filter:{ Name: search_value }"> 
      <td>{{emp.SalesmanId}}</td> 
      <td>{{emp.Name}}</td> 
      <td>{{emp.Address}}</td> 
      <td>{{emp.Phone}}</td> 
      <td>{{emp.Email}}</td> 
      <td ng-click='ctrl.open()'>{{emp.Username}}</td> 
      <td>{{emp.Role}}</td> 
     </tr> 
    </tbody> 
    ... 
</div> 

OR

は、おそらくそこ

.when('...', { 
    controller: 'listEmployeeCtrl', 
    templateUrl: '.../view.html' 
}) 

の線に沿って何かを持っている:あなたのサンプルコードを使用して

.when('...', { 
    controller: 'listEmployeeCtrl', 
    controllerAs: 'ctrl', 
    templateUrl: '.../view.html' 
}) 
+0

ありがとうございました!ルーティング 'controller:'とhtml要素( 'ng-controller =" listEmployeeCtrl "')を使ってコントローラを定義する方法の違いは何ですか? –

+0

ngController構文を使用すると、ルーティング構文を使用しているときに子コントローラを簡単に追加できます。機能的には違いはありません。 –

+0

ええ、そうですよ!今すぐ機能にアクセスできます。それが機能するようにモーダルを修正するだけです。説明をしてくれてありがとう、手を貸す時間! –

0

あなたが開いているためには、モーダルIDを渡す必要がありますが、それはありません!

+0

応答ありがとう!どこに置くべきですか? 'console.log( 'selected');'も起動されないことに注意してください。その情報を追加して更新します。 –

+0

テンプレートURLを使用していますが、.cshtmlで定義されていません。 – geminiousgoel

+0

.cshtmlファイルのtbodyの上に

  • 11. 角度フィルタが機能しません
  • 12. 角度サンプルコードが機能しません
  • 13. 角度サービスの機能を使用できません。
  • 14. 角度素材2.0は角度2.0.0のアプリでは機能しません
  • 15. 角度指示のボタンがng-click機能を実行していません
  • 16. は角度のあるファクトリメソッドでは機能しません
  • 17. 角度のあるフォームはライブサーバでは機能しません
  • 18. 角度:ディレクティブとコントローラ間の双方向バインディングが機能しません。
  • 19. ng-viewでの角度ルーティングは機能しません。
  • 20. 'プッシャー角度'はイオンアプリケーションでは機能しません
  • 21. 角度チュートリアルは第5章では機能しません(ルーティング)
  • 22. モジュールは機能ではありません - カルマ+ジャスミン+ウェブパック+角度
  • 23. コントローラを実行できません
  • 24. 角度コントローラのオブジェクト内のフィールドに到達できません
  • 25. 角度jsでコントローラ間でデータを移動できません
  • 26. 角度2のテキストボックスのクリアは機能しません
  • 27. 指令コントローラからの角度呼び出しコントローラの機能
  • 28. ジャスミンテストで角度サービス機能にアクセスすることはできません
  • 29. 角度実行機能でクッキーを取得する方法は?
  • 30. 角度の実行機能一度NG-繰り返し