簡體   English   中英

如何在不同模塊中的控制器之間共享數據

[英]How to share data between controllers in different modules

我已經下載了Angular UI Bootstrap Datepicker ,我需要訪問其控制器以獲取其范圍。 但我完全不知道怎么做而不編輯Datepicker中的代碼,我認為這不是它應該做的方式。

所以我有自己的應用程序/模塊, myApp和我有一個控制器MyController ,我需要訪問UibDatepickerControllerUibDaypickerController ,它們位於ui.bootstrap.datepicker應用程序/模塊中。 而且我不想更改ui.bootstrap.datepicker模塊中的代碼。

這基本上我之前發布的問題相同 ,但我認為我已經想到了很多。 (這個花了50個小時:D)

此解決方案不起作用,因為您無法注入控制器,就像您可以注入服務一樣。

這是我的設計:

控制器:

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>

你提供的服務如下:

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

然后將工廠注入每個控制器並使用它來使用save和get方法來回傳遞數據

如果您確實需要在另一個模塊或控制器中訪問View中設置的值。 您可以執行Niles提到的操作,或者您可以設置一個手表然后進行廣播,以便其他模塊,控制器可以訪問該值,但不能訪問該引用。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM