我已下载Angular UI Bootstrap Datepicker
,我需要访问其控制器以获取其范围。但我完全不知道怎么做而不编辑Datepicker中的代码,我认为不应该这样做。
所以我有自己的应用/模块myApp
,我有一个控制器MyController
,我需要访问UibDatepickerController
和UibDaypickerController
,{ {1}} app / module。我不想更改ui.bootstrap.datepicker
模块中的代码。
这基本上是the same problem我之前发布的,但我认为我已经想出了很多。 (这个花了50个小时:D)
This solution无法正常工作,因为您无法注入控制器,就像您可以注入服务一样。
这是我的设计:
控制器:
ui.bootstrap.datepicker
HTML:
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);
答案 0 :(得分:0)
你提供的服务如下:
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方法来回传递数据
答案 1 :(得分:0)
如果您确实需要在另一个模块或控制器中访问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);
});
}
})();