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