我有一个函数,我会像这样附加到我的范围。它附加到范围,因为我在我的HTML页面中使用此功能目前我在多个控制器中执行此操作。请注意,我的控制器都是顶级控制器,因此我无法将其置于更高级别的控制器中并继承它。
$scope.isNotString = function (str) {
return (typeof str !== "string");
}
我问我如何分享这个功能,并给出了以下内容
示例:
app.service('myService',function(){
this.sharedFunction = function() {
//do some stuff
};
});
myCntrl1($scope,myService) {
$scope.doSomething = function() {
myService.sharedFunction();
}
}
myCntrl2($scope,myService) {
$scope.doSomething = function() {
myService.sharedFunction();
}
}
有没有办法可以通过传递更直接地分享它
在$scope
到服务,以这种方式消除了对:
$scope.doSomething = function() {
myService.sharedFunction();
}
在每个控制器中。
答案 0 :(得分:1)
您可以将该功能附加到父(根)范围,但使用服务是在控制器之间共享代码的首选方式。
您可以在控制器中调用myService.init($scope)
,该函数可以将属性附加到范围,但更有可能您希望使用从中继承的父控制器。
答案 1 :(得分:1)
您可以在顶级“控制器”中声明共享功能,也可以在示例中提到的“服务”中声明共享功能。到目前为止还没有其他更好的方法。
您可以将范围分配给全局变量,该变量将全局公开该范围,但其行为方式与“service”相同,除非您不必像服务那样注入它,而是可以通过globalVar.dosomething调用()。