【问题标题】:How to pass value between two javascript files如何在两个javascript文件之间传递值
【发布时间】: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文件中使用了控制器。但是两个文件都有不同的控制器。

标签: javascript angularjs


【解决方案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 上定义属性的原因。

    【讨论】:

      猜你喜欢
      • 2016-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-14
      相关资源
      最近更新 更多