2016-04-07 25 views
0

コントローラと$ mdDialog(角材)の間でスコープを共有するにはどうすればよいですか? 私は "Controller As"の構文を使用しています。コントローラを$ mdDialogに使用する必要があります。閉じると、データが必要になります。 このコードでは、$ mdDialogで "myFunction"を呼び出す必要があります。 私はオブジェクト(self.obj)を持っていて、 'myFunction'にそれを必要とすると、$ mdDialogが 'myFunction'を呼び出すときにオブジェクトがスコープに存在しないことが起こります。

angular.module('myApp') 
      .controller('myController', myController); 

myController.$inject = ['$mdDialog']; 

function myController($mdDialog) { 

var self = this; 
self.obj = {'firstName:'hello','lastName':'world'} 


self.myFunction = function() {console.log(JSON.stringfy(self.obj))}; 

self.showDialog = function(){ 

    $mdDialog.show({ 
     controller: function ctrl() {}, 
     controllerAs: 'ctrl', 
     templateUrl: 'views/modal_templates/dialog01.template.html', 
     parent: angular.element(document.body), 
     targetEvent: ev, 
     clickOutsideToClose: true 
    }) 
} 

}; 

答えて

0

myfunctionを注入するためにlocalsオプションを使用できます。次に、bind()メソッドを使用して、thisキーワードがselfに設定された新しい関数を作成します。

バインド()メソッドが呼び出されたときに、そのに提供された値

お使いのコントローラで
self.myFunction = function() {console.log(JSON.stringfy(this.obj))}; 

$mdDialog.show({ 
    controller: function ctrl(myfunction) { }, 
    controllerAs: 'ctrl', 
    templateUrl: 'views/modal_templates/dialog01.template.html', 
    parent: angular.element(document.body), 
    targetEvent: ev, 
    clickOutsideToClose: true, 
    locals: { 
     myfunctiion: myFunction.bind(self), 

    } 
}) 
+0

おかげで目覚めバイト、私はより良い説明して私の質問を編集しました。私の問題は、 'myFunction'の中にオブジェクトが必要なことです。モーダルテンプレートのmd-buttonでこのオブジェクトを更新します。 –

+0

が答えを更新しました。あなたは自分自身にコンテキストをロックするためにbind()メソッドを使う必要があります –

+0

ありがとう、それは私の問題を解決しました。 –

2

に設定し、このキーワードを持って、新しい関数を作成:

.controller('testing', 
     function($scope, $mdDialog) { 
$scope.items = [0, 1, 2, 3]; 
    $scope.addAddress = function(ev) 
    { 
     $mdDialog.show({ 
      controller:() => this, 
       controllerAs: 'ctrl', 
       templateUrl: 'views/address.html', 
       targetEvent: ev, 
       clickOutsideToClose:true, 
       locals: { 
        items: $scope.items, 
       }, 
       }); 
    }; 

をaddress.htmlでは、「ctrl」の項目にアクセスします

私は、以下のリンクから、このソリューションを持っ

https://github.com/angular/material/issues/1531

関連する問題