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

3

我已经实现了一个日历,并在点击时获取指定的日期。以下是 Calendar.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。 应用程序.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的值是未定义的。我该怎么做才能在application.js中使用来自calender.js的dateKey的值?


你的意思是另一个JS文件?另一个控制器?服务? - pedrommuller
另一个 JavaScript 文件...我在 JavaScript 文件中使用了控制器。但是这两个文件有不同的控制器。 - user3615856
3个回答

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

请参考这个问题获取更多相关信息。
另外一种选项是将变量写入$rootscope,并使用emit触发事件。值得注意的是,与$broadcast相比,emit似乎更有效率。
引用如下: $emit:通过作用域层次结构向上分派事件名称,通知已注册的$rootScope.Scope监听器。

0
为了使数据在您的AngularJS应用程序中持久存在,您应该实现服务。服务文档对于初学Angular的人可能会很困惑,但它将帮助您了解如何组织您的Angular应用程序:

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


@Nikholas,我能否在同一个js文件中创建服务,还是必须为服务创建不同的js文件? - user3615856
我不太明白你所说的“文件”是什么意思。你在不同文件中组织代码的方式不应该影响你的Angular应用程序的架构。从你上面发布的代码中,我了解到你还是一个Angular的初学者。我认为你应该先阅读AngularJS主页上的教程。它会回答你很多问题。 - Nikolas

0

本文讨论如何使一个控制器与另一个控制器通信

简而言之,您需要创建一个服务,使用$rootScope.$broadcast()向其他控制器发送消息。

当然,这假定您正在尝试实现两个控制器之间的通信。 从您的问题中并不完全清楚是否确实是这种情况 - 您在两个不同的文件中都提到了$scope

两个不同Javascript文件中的$scope(几乎肯定)将是内存中不同的对象, 因为它很可能属于不同的控制器(或服务、工厂或指令)。 除非您发布这两个文件的整个源代码,否则无法确定。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接