如何在两个javascript文件之间传递值

时间:2014-06-20 13:15:50

标签: javascript angularjs

我已经实施了日历,点击后即可获得指定日期。来自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的值?

3 个答案:

答案 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应用程序中的数据保持不变,您应该实现服务。关于服务的文档可能会让角色初学者感到困惑,但它可以帮助您了解如何组织角度应用程序:

https://docs.angularjs.org/guide/services

答案 2 :(得分:0)

这篇文章discusses how to make one controller communicate with another

总之,您创建了一个服务,它$rootScope.$broadcast()向其他控制器发送消息。

这假设,当然两个控制器之间的通信正是您要实现的目标。 你的问题并不完全清楚是否确实如此 - 你在两个不同的文件中提到$scope

两个不同Javascript文件中的$scope(几乎可以肯定)将作为内存中的不同对象, 因为很可能,他们属于不同的控制器(或服务,工厂或指令)。 除非您发布这两个文件的完整来源,否则无法判断。

但是,很可能这就是为什么无法从其他$scope访问在$scope上定义属性的原因。