2016-08-27 49 views
1

我已經下載了Angular UI Bootstrap Datepicker,我需要訪問其控制器的範圍。但我完全不知道如何在沒有編輯Datepicker中的代碼的情況下做到這一點,我認爲這不是它應該完成的方式。如何在不同模塊的控制器之間共享數據

所以,我有我自己的應用程序/模塊,myApp,我有一個控制器MyController,在我需要訪問UibDatepickerControllerUibDaypickerController,這是在ui.bootstrap.datepicker應用程序/模塊。我不想更改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:

<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

對於日期,我只是將元素的值綁定到控制器中的變量,對於直接控制器訪問控制器,Niles的答案更接近你想要的。你可以發佈一個小提琴或類似的東西,所以我們可以更好地瞭解你想去的地方嗎? – MPawlak

回答

0

您撥打一個服務是這樣的:

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

那麼你注入工廠進入ea ch控制器並使用它來使用save和get方法來回傳遞數據

+0

這將需要我編輯ui.bootstrap.datepicker模塊中的代碼,但它開始看起來好像沒有其他選項 – Dope

0

如果您確實需要在另一個模塊或控制器中訪問在View中設置的值。你可以做奈爾斯提到的,或者你可以設置一個手錶,然後廣播,以便其他模塊,控制器可以訪問該值,但不是參考。

(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); 
     }); 
    } 
})(); 
相關問題