2016-08-27 3 views
1

Ich habe Angular UI Bootstrap Datepicker heruntergeladen, und ich muss auf ihre Controller für ihre Bereiche zugreifen. Aber ich habe absolut keine Ahnung, wie ich das machen könnte, ohne den Code in Datepicker zu bearbeiten, was meiner Meinung nach nicht so ist, wie es gemacht werden sollte.Wie Daten zwischen Controllern in verschiedenen Modulen freigegeben werden

So habe ich meine eigene app/Modul, myApp und ich habe einen Controller MyController, in der ich Zugang müssen UibDatepickerController und UibDaypickerController, die in ui.bootstrap.datepicker app/Modul sind. Und ich möchte den Code in ui.bootstrap.datepicker Modul nicht ändern.

Dies ist im Grunde the same problem Ich habe zwar vor einiger Zeit gepostet, aber ich habe es herausgefunden, denke ich. (Verbrachte 50 Stunden in diesem: D)

This solution funktioniert nicht, weil Sie Controller nicht injizieren können, wie Sie einen Dienst injizieren können.

Hier ist meine Art von Design:

Controller:

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:

<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

Wozu benötigen Sie Zugang? Datum/Tag ausgewählt oder intern? – MPawlak

+0

Ausgewähltes Datum und ich brauche auch das Modul ui.bootstrap.datepicker, um auf meine Variablen in meinem Controller zugreifen zu können. – Dope

+0

Für das Datum, ich würde nur den Wert des Elements an eine Variable in Ihrem Controller binden, für direkten Controller zu Controller Zugriff Niles 'Antwort ist näher, was Sie wollen. Kannst du eine Geige oder etwas Ähnliches posten, damit wir besser verstehen können, wo du hin willst? – MPawlak

Antwort

0

Sie machen einen Dienst so etwas wie:

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

dann Sie injizieren die Fabrik in EA ch Controller und verwenden Sie es, um Daten mit den Methoden zum Sichern und Abrufen

+0

Dies würde erfordern, dass ich Code in ui.bootstrap.datepicker Modul bearbeiten, aber es scheint, als gäbe es keine andere Option – Dope

0

zu übergeben. Wenn Sie in einem anderen Modul oder Controller wirklich auf einen Wert zugreifen müssen, der in Ihrer Ansicht festgelegt ist. Sie können tun, was Niles erwähnt hat, oder Sie können eine Überwachung einrichten und diese dann senden, damit andere Module, Controller auf den Wert zugreifen können, aber nicht auf die Referenz.

(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); 
     }); 
    } 
})(); 
Verwandte Themen