AngularJs在整个应用程序中使用javascript函数

AngularJs在整个应用程序中使用javascript函数,javascript,angularjs,Javascript,Angularjs,我有一些主要功能,我在我的webApp中到处使用它。这些函数是纯JS的,与AngularJs无关,我希望能够在我的应用程序中的任何地方使用它们,因为它们是执行简单任务的助手函数 这是我的一个函数示例: function _removeArray(obj, id) { //Remove object from array for(d=0; d<obj.length;d++){ if(obj[d].id == id){ obj.splice(d,

我有一些主要功能,我在我的webApp中到处使用它。这些函数是纯JS的,与AngularJs无关,我希望能够在我的应用程序中的任何地方使用它们,因为它们是执行简单任务的助手函数

这是我的一个函数示例:

function _removeArray(obj, id) { //Remove object from array
    for(d=0; d<obj.length;d++){
        if(obj[d].id == id){
            obj.splice(d,1);
            return obj;
        }
    };
};
函数_removeArray(obj,id){//从数组中删除对象

对于(d=0;d我经常做的是创建一个全局“helper”对象:


如果有一大堆函数和变量挂在全局范围内,那么这不是一个好主意——但我认为有一个,所有函数和变量嵌套在其中,是非常有用的。

我经常做的是创建一个全局“helper”对象:


如果有一大堆函数和变量挂在全局范围内,那么这不是一个好主意——但我认为有一个,所有函数和变量都嵌套在其中,是非常有用的。

你可以使用一个,这是许多JS库(比如和Angular本身)所使用的做,尽管这基本上是工厂/服务允许您做的。

您可以使用a,这是许多JS库(如和Angular本身)所做的,尽管这基本上是工厂/服务允许您做的。

如果您不使用任何模块系统和模块绑定器(如webpack、browserify)或模块加载器(像systemjs)那么是的。对于angular1来说,这是主要的工作方式

在我的应用程序中,我刚刚创建了一些工厂,如
arrayUtils
numberUtils
domUtils
dateUtils
,并在需要任何函数时注入它们

例如:

date-utils-module.js

(function () {
  'use strict';

  /* @ngdoc object
   * @name components.dateUtils
   * @description
   *
   */
  angular
    .module('components.dateUtils', [
      'angularMoment'
    ]);
}());
date-utils-factory.js

(function () {
  'use strict';

  /**
   * @ngdoc service
   * @name components.dateUtils.factory:dateUtils
   *
   * @description
   *
   */
  angular
    .module('components.dateUtils')
    .factory('dateUtils', dateUtilsFactory);

  function dateUtilsFactory(moment) {
    var dateUtils = {
      range: range
    };

    return dateUtils;

    /**
     * Возвращает строку, содержащую текстовое представления диапазона дат.
     * Например (считая, что сейчас 2015 год):
     * <pre>
     * чт, 31 декабря, 17:30 – ∞
       ∞ – пт, 1 января 2016, 21:30
      чт, 31 декабря, 17:30 – пт, 1 января 2016, 09:00
      чт, 31 декабря, 17:30 – 21:30
    * </pre>
    * @param date1 первая дата
    * @param date2 вторая дата
    *
    * @returns строка с диапазоном дат.
    */
    function range(date1, date2) {
      var now = moment(),
          m1 = moment(date1 || null),
          m2 = moment(date2 || null),
          t1 = '∞',
          t2 = '∞';

      if (m1.isValid()) {
        // t1 = m1.calendar();
        t1 = m1.isSame(now, 'year') ? m1.format('dd, D MMMM, HH:mm') : m1.format('dd, D MMMM YYYY, HH:mm');
      }

      if (m2.isValid()) {
        // t2 = m1.isSame(m2, 'day') ? m2.format('HH:mm') : m2.calendar();
        t2 = m2.isSame(m1, 'day') ? m2.format('HH:mm') :
            m2.isSame(now, 'year') ? m2.format('dd, D MMMM, HH:mm') : m2.format('dd, D MMMM YYYY, HH:mm');
      }

      return t1 + ' – ' + t2;
    }

  }

}());
(函数(){
"严格使用",;
/**
*@ngdoc服务
*@name components.dateUtils.factory:dateUtils
*
*@说明
*
*/
有棱角的
.module('components.dateUtils')
.工厂(“dateUtils”,dateUtilsFactory);
函数DateUtilFactory(时刻){
var dateUtils={
射程:射程
};
返回日期;
/**
* Возвращает строку, содержащую текстовое представления диапазона дат.
* Например (считая, что сейчас 2015 год):
* 
* чт, 31 декабря, 17:30 – ∞
∞ – пт, 1 января 2016, 21:30
чт, 31 декабря, 17:30 – пт, 1 января 2016, 09:00
чт, 31 декабря, 17:30 – 21:30
* 
*@param date1Пааааааааа
*@param date2ааааааааааа
*
*返回值为。
*/
函数范围(日期1、日期2){
var now=力矩(),
m1=力矩(日期1 | |空),
m2=力矩(日期2 | |空),
t1='∞',
t2='∞';
if(m1.isValid()){
//t1=m1.calendar();
t1=m1.isname(现在是'year')?m1.format('dd,D-MMMM,HH:mm'):m1.format('dd,D-MMMM-YYYY,HH:mm');
}
if(m2.isValid()){
//t2=m1.isname(m2,'day')?m2.format('HH:mm'):m2.calendar();
t2=m2.isame(m1,'day')?m2.format('HH:mm'):
m2.isname(现在是“年”)?m2.format('dd,D-MMMM,HH:mm'):m2.format('dd,D-MMMM-YYYY,HH:mm');
}
返回t1+'-'+t2;
}
}
}());

如果您不使用任何模块系统和模块绑定器(如webpack、browserify)或模块加载程序(如systemjs),那么可以。对于angular1来说,这是主要的工作方式

在我的应用程序中,我刚刚创建了一些工厂,如
arrayUtils
numberUtils
domUtils
dateUtils
,并在需要任何函数时注入它们

例如:

date-utils-module.js

(function () {
  'use strict';

  /* @ngdoc object
   * @name components.dateUtils
   * @description
   *
   */
  angular
    .module('components.dateUtils', [
      'angularMoment'
    ]);
}());
date-utils-factory.js

(function () {
  'use strict';

  /**
   * @ngdoc service
   * @name components.dateUtils.factory:dateUtils
   *
   * @description
   *
   */
  angular
    .module('components.dateUtils')
    .factory('dateUtils', dateUtilsFactory);

  function dateUtilsFactory(moment) {
    var dateUtils = {
      range: range
    };

    return dateUtils;

    /**
     * Возвращает строку, содержащую текстовое представления диапазона дат.
     * Например (считая, что сейчас 2015 год):
     * <pre>
     * чт, 31 декабря, 17:30 – ∞
       ∞ – пт, 1 января 2016, 21:30
      чт, 31 декабря, 17:30 – пт, 1 января 2016, 09:00
      чт, 31 декабря, 17:30 – 21:30
    * </pre>
    * @param date1 первая дата
    * @param date2 вторая дата
    *
    * @returns строка с диапазоном дат.
    */
    function range(date1, date2) {
      var now = moment(),
          m1 = moment(date1 || null),
          m2 = moment(date2 || null),
          t1 = '∞',
          t2 = '∞';

      if (m1.isValid()) {
        // t1 = m1.calendar();
        t1 = m1.isSame(now, 'year') ? m1.format('dd, D MMMM, HH:mm') : m1.format('dd, D MMMM YYYY, HH:mm');
      }

      if (m2.isValid()) {
        // t2 = m1.isSame(m2, 'day') ? m2.format('HH:mm') : m2.calendar();
        t2 = m2.isSame(m1, 'day') ? m2.format('HH:mm') :
            m2.isSame(now, 'year') ? m2.format('dd, D MMMM, HH:mm') : m2.format('dd, D MMMM YYYY, HH:mm');
      }

      return t1 + ' – ' + t2;
    }

  }

}());
(函数(){
"严格使用",;
/**
*@ngdoc服务
*@name components.dateUtils.factory:dateUtils
*
*@说明
*
*/
有棱角的
.module('components.dateUtils')
.工厂(“dateUtils”,dateUtilsFactory);
函数DateUtilFactory(时刻){
var dateUtils={
射程:射程
};
返回日期;
/**
* Возвращает строку, содержащую текстовое представления диапазона дат.
* Например (считая, что сейчас 2015 год):
* 
* чт, 31 декабря, 17:30 – ∞
∞ – пт, 1 января 2016, 21:30
чт, 31 декабря, 17:30 – пт, 1 января 2016, 09:00
чт, 31 декабря, 17:30 – 21:30
* 
*@param date1Пааааааааа
*@param date2ааааааааааа
*
*返回值为。
*/
函数范围(日期1、日期2){
var now=力矩(),
m1=力矩(日期1 | |空),
m2=力矩(日期2 | |空),
t1='∞',
t2='∞';
if(m1.isValid()){
//t1=m1.calendar();
t1=m1.isname(现在是'year')?m1.format('dd,D-MMMM,HH:mm'):m1.format('dd,D-MMMM-YYYY,HH:mm');
}
if(m2.isValid()){
//t2=m1.isname(m2,'day')?m2.format('HH:mm'):m2.calendar();
t2=m2.isame(m1,'day')?m2.format('HH:mm'):
m2.isname(现在是“年”)?m2.format('dd,D-MMMM,HH:mm'):m2.format('dd,D-MMMM-YYYY,HH:mm');
}
返回t1+'-'+t2;
}
}
}());

不完全清楚您的应用程序是否是纯Angular应用程序。如果是,我建议您使用标准Angular服务或factory模式。如果您的应用程序是某种混合应用程序,并且您正在Angular框架之外运行应用程序的一部分,那么您可以使用JavaScrip声明所有描述的功能t模块模式


是的,您创建了一个全局变量,但您已将所有功能封装在一个全局对象中。

不完全清楚您的应用程序是否是纯角度应用程序。如果是,我建议您使用y