[英]How to share data between controllers in different modules
我已經下載了Angular UI Bootstrap Datepicker
,我需要訪問其控制器以獲取其范圍。 但我完全不知道怎么做而不編輯Datepicker中的代碼,我認為這不是它應該做的方式。
所以我有自己的應用程序/模塊, myApp
和我有一個控制器MyController
,我需要訪問UibDatepickerController
和UibDaypickerController
,它們位於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.