2016-07-29 15 views
0

私と一緒にいてください - 私はAngularJS newbです。Ionic/AngularJS - コントローラ付きグローバルモーダル

私は自分のアプリのどこからでも利用できるようにするためのフォームを用意しています。私はそれをコード化する方法を理解しようとしています。私の現在の試みは、このように、サービスへのモーダルを置くことです:

.service('NewObjectService', function() { 
    var svc = this; 

    svc.showModal = function() { 
    $ionicModal.fromTemplateUrl('template.html', { 
     scope: null, // what should I do here? 
     animation: 'slide-in-up' 
    }).then(function(modal) { 
     svc.modal = modal; 
     modal.show(); 
    }); 
    } 
}) 

.controller('NewObjectController', function() { 
    $scope.$on('$ionicView.enter', function() { 
    console.log('NewObjectController'); 
    // setup new object 
    }) 
}) 

次にどこにでも私のアプリでから、私はNewObjectService.showModal()を呼び出すことができますし、モーダルがポップアップ表示されます。その部分は機能しています。

私が実行している問題は、コントローラを起動できないため、初期化が呼び出されず、新しいオブジェクトがnullになることです。

NewObjectControllerの範囲から実際にモデムを呼び出す必要があるようですが、私はそれを試みましたが、他のコントローラ - そのため、サービス内のそのコントローラを呼び出す方法を理解できませんでした。

私は根本的に何かをやっているだけですが、私はそれが何であるか分かりません。どんな助け?

アップデート:私もちょうどルートスコープブロードキャストを使用してから別のコントローラを呼び出してみました:

.controller('MainCtrl', function() { 
    this.showModal = function() { 
    $rootScope.$broadcast('new_object:show_modal'); 
    } 
}) 

.controller('NewObjectCtrl', function() { 
    $rootScope.$on('new_object:show_modal', function() { 
    // show modal 
    }) 
}) 

私はそこに実行している問題はNewObjectCtrlがMainCtrlの実行時に呼び出されていないことです、ブロードキャストイベントを捕捉しません。

+0

(から)多分[本](http://stackoverflow.com/questions/15618213/how-再利用 - 1つのコントローラの2つの異なるビュー)は役に立ちます – uzilan

+0

それは私が扱っているよりも別の問題のようです。私はコントローラを共有しようとはしていない。 –

答えて

0

サービスを宣言するときは、角型宣言、つまりvar svc = {}に自身を返す必要があります。 svcを返す。あなたがサービスを注入してスコープを渡した後で、どのコントローラからもsvc.showModalを呼び出します。 $(受信機)に。$ rootScopeを使用して別のコントローラからのコントローラを呼び出して、$ rootScope。$発する

.service('NewObjectService', function($ionicModal) { 
    var svc = {}; 

    svc.showModal = function(_scope) { 
    $ionicModal.fromTemplateUrl('template.html', { 
     scope: _scope, // passing in scope from controller 
     animation: 'slide-in-up' 
    }).then(function(modal) { 
     svc.modal = modal; 
     modal.show(); 
    }); 
    } 

    return svc; 

}) 

.controller('NewObjectController', function($scope, $rootScope, NewObjectService) { 
    // fires off when $rootScope.$emit('ShowModal') is called anywhere 
    $rootScope.$on('ShowModal', function(data) { 
    NewObjectService.showModal(data._scope); 
    }); 
}) 

.controller('OtherController', function($scope, $rootScope) { 
    $scope.contactOtherController = function() { 
    // contact the other controller from this controller 
    $rootScope.$emit("ShowModal", {scope: $scope}); 
    } 
}) 
+0

しかし、 'NewObjectController'がロードされたときにあなたのコードがモーダルをロードします - どうすれば別のコントローラからトリガできますか? –

+0

$ rootと$ rootScopeを使用できるようにコードを編集しました。コントローラ間で通信する$ emit – tothefux

+0

Aha。それは合理的、感謝のようです! –

関連する問題