2016-08-27 25 views
1

Angular UI Bootstrap Datepickerをダウンロードしましたが、スコープのコントローラにアクセスする必要があります。しかし、私はDatepickerのコードを編集することなくそれをどうやってやるべきか分かりません。異なるモジュールのコントローラ間でデータを共有する方法

だから私は自分のアプリケーション/モジュール、myAppを持っていると私はui.bootstrap.datepickerアプリ/モジュールであるUibDatepickerControllerUibDaypickerController、へのアクセスを必要とするコントローラMyControllerを、持っています。そして私はui.bootstrap.datepickerモジュールのコードを変更したくありません。

これは基本的にはthe same problemですが、前に投稿しましたが、私はそれを多く考え出しました。あなたがサービスを注入することができるようにコントローラを注入することができないので、(これで50時間を過ごした:D)

This solutionは動作しません。ここで

は、私のデザインのようなものです:

コントローラー:

function MyCtrl() { 
var vm = this; 
vm.dt = new Date(); 
vm.options = { 
    ... 
}; 
vm.refresh = function() { 
    //returns initialized value all the time (current date) 
    console.log(vm.dt); 
    $("#calendar").data("$uibDatepickerController").refreshView(); 
} 
}; 
angular.module('myApp') 
    .controller('MyCtrl', MyCtrl); 

HTML:あなたは注入

app.factory('thisfactory',function(){ 
    var data = null; 
    var get = function(){ 
    return data; 
    } 
    var save = function(newData){ 
    data = newData; 
    } 
    return {get:get,save:save} 
}); 

<div ng-controller="CalendarCtrl as calCtrl"> 
    <pre>Selected date is: <em>{{calCtrl.dt | date:'fullDate' }}</em> 
    </pre> 
    <div style="display:inline-block"> 
    <div uib-datepicker="" id="calendar" ng-model="calCtrl.dt" datepicker-options="calCtrl.options"></div> 
    </div> 
    <button ng-click="calCtrl.refresh()">Refresh</button> 
</div> 
+0

特に具体的にアクセスする必要はありますか?選択された日付/日または内部の何か – MPawlak

+0

選択した日付と、私のコントローラの変数にアクセスできるようにするには、ui.bootstrap.datepickerモジュールが必要です。 – Dope

+0

日に日には、コントローラの変数に要素の値をバインドするだけで、コントローラからコントローラへの直接アクセスが可能になります。ナイルズの答えはあなたが望むものに近いです。あなたはどこに行くか分かりやすくするために、フィドルなどを投稿できますか? – MPawlak

答えて

0

はあなたのようなサービス何かを作ります工場をeaにchコントローラを使用して、saveメソッドとgetメソッドを使用してデータを前後に渡します。

+0

これはui.bootstrap.datepickerモジュールのコードを編集する必要がありますが、他のオプションがないかのように見えるようになります – Dope

0

実際に別のモジュールまたはコントローラで、ビューに設定された値にアクセスする必要がある場合。あなたはナイルズが言及したことを行うことができます。または、時計をセットアップしてから他のモジュール、コントローラーが値にアクセスできるようにブロードキャストできますが、参照はできません。

(function(){ 
    angular.controller("testController", testController); 
    angular.controller("otherController", otherController); 

    testController.$inject = ["$scope", "$rootScope"]; 
    otherController.$inject = ["$scope"]; 

    function testController($scope, $rootScope) { 
     var vm = this; 
     $scope.$watch("vm.datePicker", function(newValue){ 
      $rootScope.$broadcast("DATEPICKER_CHANGED", newValue); 
     }); 
    } 

    function otherController($scope) { 
     var vm = this; 

     $scope.$on("DATEPICKER_CHANGED", function(event, obj) { 
      console.log(obj); 
     }); 
    } 
})(); 
関連する問題