我已经实施了日历,点击后即可获得指定日期。来自Calender.js的片段:
$scope.checkDate = function(key){
$scope.dateKey = key - 1;
alert("left")
alert($scope.dateKey)
if ($scope.dateKey>=1){
alert("Testing")
}
if(dateKey == 0) {
$rootScope.loadNextDay = true;
alert("right")
}
};
现在我获得的dateKey的值在0到6之间,具体取决于所选的日期。 现在我试图在另一个js文件(一个新文件)中使用变量ie $ scope.dateKey。 application.js的片段: -
if($scope.currentDate = true && shift==0)
{
alert("Hey.....")
alert($scope.dateKey)
}
else{
alert("Testing123")
$scope.moveTo(0);
$scope.currentDate = false;
$timeElapsed.hide();
params.starthour = 0;
}
但是在这个$ scope.dateKey中给出了undefined。我该怎么做才能使用从calender.js到application.js的dateKey的值?
答案 0 :(得分:4)
跨多个控制器共享信息的最佳方式是服务,因为服务是单例,因此更容易管理和隔离范围/变量。
一个基本的例子:
var app = angular.module('myApp', []);
app.factory('datepickerinfo', function() {
var keyValue;
datepickerinfo.setKey = function(key) {
keyValue = key;
};
datepickerinfo.getKey = function(){
return keyValue;
}
return datepickerinfo;
});
//您可以注入依赖关系并在多个控制器之间共享它
function MyCtrl($scope, datepickerinfo) {
$scope.dateKey = datepickerinfo.getKey();
}
请查看此question以获取进一步参考。
还有其他选择,写入$ rootscope,并使用emit发起一个事件值得一提的是,发射似乎更有效而不是$ broadcast
$ emit:通过范围层次结构通知向上调度事件名称 注册的$ rootScope.Scope监听器。
答案 1 :(得分:0)
要使整个angularJS应用程序中的数据保持不变,您应该实现服务。关于服务的文档可能会让角色初学者感到困惑,但它可以帮助您了解如何组织角度应用程序:
答案 2 :(得分:0)
这篇文章discusses how to make one controller communicate with another。
总之,您创建了一个服务,它$rootScope.$broadcast()
向其他控制器发送消息。
这假设,当然两个控制器之间的通信正是您要实现的目标。
你的问题并不完全清楚是否确实如此 -
你在两个不同的文件中提到$scope
。
两个不同Javascript文件中的$scope
(几乎可以肯定)将作为内存中的不同对象,
因为很可能,他们属于不同的控制器(或服务,工厂或指令)。
除非您发布这两个文件的完整来源,否则无法判断。
但是,很可能这就是为什么无法从其他$scope
访问在$scope
上定义属性的原因。