Javascript 如何在angular js中跨控制器共享函数

Javascript 如何在angular js中跨控制器共享函数,javascript,angularjs,Javascript,Angularjs,我是Angular.js的新手。 我有一个应用程序,它包含几个不同页面的标签。每个页面由不同的控制器维护,以管理自己的数据。我的疑问是,如何在不同的页面(控制器)上使用相同的函数。例如 不同页面的字段将具有相同的验证函数、格式化函数和许多其他util函数 1.如何维护不同控制器之间的通用功能? 2.如何将普通函数作为侦听器绑定到绑定到不同页面(由不同控制器管理)字段的事件,因为它们不共享作用域? 谢谢。这就是我们的目的 它们提供单例“类”,包含您希望在应用程序中共享的任何数据和函数 例如: ap

我是Angular.js的新手。
我有一个应用程序,它包含几个不同页面的标签。每个页面由不同的控制器维护,以管理自己的数据。我的疑问是,如何在不同的页面(控制器)上使用相同的函数。例如 不同页面的字段将具有相同的验证函数、格式化函数和许多其他util函数

1.如何维护不同控制器之间的通用功能?
2.如何将普通函数作为侦听器绑定到绑定到不同页面(由不同控制器管理)字段的事件,因为它们不共享作用域?
谢谢。

这就是我们的目的

它们提供单例“类”,包含您希望在应用程序中共享的任何数据和函数

例如:

app.factory('myService', function() {
  return {
    doSomethingCool: doSomethingCool
  };
});

app.controller('myController', function(myService) {
  myService.doSomethingCool();
});
工厂和服务之间有一些细微的差别,所以你必须仔细研究一下(这有点超出了这个问题的范围)。

这就是为什么

它们提供单例“类”,包含您希望在应用程序中共享的任何数据和函数

例如:

app.factory('myService', function() {
  return {
    doSomethingCool: doSomethingCool
  };
});

app.controller('myController', function(myService) {
  myService.doSomethingCool();
});

工厂和服务之间有一些细微的区别,因此您必须研究它们(这有点超出了本问题的范围)。

使用工厂或服务

要在不同控制器之间共享功能,可以使用工厂或服务。一个例子将更好地说明这一点

控制器和工厂

这是Angular JS文档中的一个示例。工厂可以在任何地方使用,它被注入到函数中

angular.
module('myServiceModule', []).
controller('MyController', ['$scope','notify', function ($scope, notify) {
   $scope.callNotify = function(msg) {
     notify(msg);
   };
}]).
factory('notify', ['$window', function(win) {
  var msgs = [];
  return function(msg) {
    msgs.push(msg);
    if (msgs.length == 3) {
      win.alert(msgs.join("\n"));
      msgs = [];
    }
  };
}]);
请参见控制器上的函数中有一个
notify
的注入,如果您愿意,可以在另一个控制器中调用该函数

指令

您还应该看看指令,它们允许您编写自己的html标记或属性。这些可以在不同的页面上重复使用

指令示例

这是实际的指令代码

app.directive('appInfo', function() { 
  return { 
    restrict: 'E', 
    scope: { 
      info: '=' 
    }, 
    templateUrl: 'js/directives/appInfo.html' 
  }; 
});
restrict:E
表示它将用作元素而不是属性

scope
列出元素可用的不同范围

templateUrl
此链接指向存储html片段的位置

下面是指令html代码段

<img class="icon" ng-src="{{ info.icon }}"> 
<h2 class="title">{{ info.title }}</h2> 
<p class="developer">{{ info.developer }}</p> 
<p class="price">{{ info.price | currency }}</p>
这是构建一个指令的基础,这个指令只有html和作用域,但是您可以创建更复杂的使用控制器的指令

学习的额外注意事项


花点时间阅读AngularJS教程,它们是免费的,最多只需要2晚的工作时间。它们还解释了Angular JS的所有基础知识,如指令、控制器、服务等。

使用工厂或服务

要在不同控制器之间共享功能,可以使用工厂或服务。一个例子将更好地说明这一点

控制器和工厂

这是Angular JS文档中的一个示例。工厂可以在任何地方使用,它被注入到函数中

angular.
module('myServiceModule', []).
controller('MyController', ['$scope','notify', function ($scope, notify) {
   $scope.callNotify = function(msg) {
     notify(msg);
   };
}]).
factory('notify', ['$window', function(win) {
  var msgs = [];
  return function(msg) {
    msgs.push(msg);
    if (msgs.length == 3) {
      win.alert(msgs.join("\n"));
      msgs = [];
    }
  };
}]);
请参见控制器上的函数中有一个
notify
的注入,如果您愿意,可以在另一个控制器中调用该函数

指令

您还应该看看指令,它们允许您编写自己的html标记或属性。这些可以在不同的页面上重复使用

指令示例

这是实际的指令代码

app.directive('appInfo', function() { 
  return { 
    restrict: 'E', 
    scope: { 
      info: '=' 
    }, 
    templateUrl: 'js/directives/appInfo.html' 
  }; 
});
restrict:E
表示它将用作元素而不是属性

scope
列出元素可用的不同范围

templateUrl
此链接指向存储html片段的位置

下面是指令html代码段

<img class="icon" ng-src="{{ info.icon }}"> 
<h2 class="title">{{ info.title }}</h2> 
<p class="developer">{{ info.developer }}</p> 
<p class="price">{{ info.price | currency }}</p>
这是构建一个指令的基础,这个指令只有html和作用域,但是您可以创建更复杂的使用控制器的指令

学习的额外注意事项


花点时间阅读AngularJS教程,它们是免费的,最多只需要2晚的工作时间。它们还解释了Angular JS的所有基础知识,如指令、控制器、服务等。

第一个问题的答案是使用服务。对于第二个问题,您可能应该看看指令,第一个问题的答案是使用服务。对于第二个,您可能应该看看指令,例如,如果我们看到onclick=“return maskField(this,event)”,我会在不同页面的每个输入字段上使用它。如何在ang.js中实现这一点?我的意思是,如何将maskField()绑定到js中不同页面的不同字段?谢谢。@Ramson这是一个指令,如果您需要可重用的html的话。@Ramson我现在添加一个示例指令。但是codecademy可以给你更多的细节。你能给我一个例子/链接来使用指令在许多html元素上使用html代码片段吗。我读到指令是用于重用元素而不是片段的。如果我是,请纠正我wrong@Ramson如果您想在几个常规元素上使用is,请在directive.html中使用它,或使
限制为:“A”这允许您将指令声明为可以添加到其他标记中的属性,但我恐怕这就是我的知识变得有点薄弱的原因,因为我没有这样做。我希望我至少能帮你一点忙。幸运的是,如果我们看到onclick=“returnmaskfield(this,event)”,我会在不同页面的每个输入字段上使用它。如何在ang.js中实现这一点?我的意思是,如何将maskField()绑定到js中不同页面的不同字段?谢谢。@Ramson这是一个指令,如果您需要可重用的html的话。@Ramson我现在添加一个示例指令。但是codecademy可以给你更多的细节。你能给我一个例子/链接来使用指令在许多html元素上使用html代码片段吗。我读到指令是用于重用元素而不是片段的。请纠正我的错误