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

Posted

技术标签:

【中文标题】如何在两个javascript文件之间传递值【英文标题】:How to pass value between two javascript files 【发布时间】:2014-08-11 06:23:33 【问题描述】:

我已经实施了一个日历,点击后我得到了指定的日期。来自 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 文件(一个新文件)中使用变量,即 $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 中给出的是未定义的。从calender.js到application.js中使用dateKey的值应该怎么做?

【问题讨论】:

另一个js文件是什么意思?另一个控制器?服务? 另一个javascript文件..我在javascript文件中使用了控制器。但是两个文件都有不同的控制器。 【参考方案1】:

在多个控制器之间共享信息的最佳方式是服务,因为服务是单例的,因此更容易管理和隔离范围/变量。

一个基本的例子:

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 引发事件,值得一提的是,emit 似乎比 $broadcast 更有效

$emit:通过作用域层次向上调度事件名称通知 注册的 $rootScope.Scope 监听器。

【讨论】:

【参考方案2】:

要使数据在您的 angularJS 应用程序中持久化,您应该实现服务。服务文档对于 Angular 的初学者来说可能会很混乱,但它会帮助你理解如何组织你的 Angular 应用程序:

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

【讨论】:

@Nikholas..我可以在同一个 js 文件中创建服务还是必须为服务创建不同的 js 文件。 我真的不知道你说的文件是什么意思。不同文件中的代码组织不应影响 Angular 应用程序的架构。从您上面发布的代码中,我了解到您仍然是 Angular 的初学者。我认为您应该先阅读 angularJS 主页上的教程。它会回答你的许多问题。【参考方案3】:

本文discusses how to make one controller communicate with another。

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

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

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

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

【讨论】:

以上是关于如何在两个javascript文件之间传递值的主要内容,如果未能解决你的问题,请参考以下文章

如何在javascript中的不同html页面之间传递变量值

QT中两个类之间如何进行值传递?如何一个类里面定义了一个数组a[270],怎么传递给另一个类?

JavaScript --- 如何制定规则以确保用户输入的值介于两个特定数字之间

两个视图模型之间的淘汰赛传递值

如何使用 HTML 表单将 JavaScript 值传递到另一个 PHP 页面?

如何在两个 .NET AppDomain 之间传递未知类型?