有没有办法可以共享我在控制器之间附加到我的范围的功能?

时间:2013-10-15 08:59:29

标签: angularjs

我有一个函数,我会像这样附加到我的范围。它附加到范围,因为我在我的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();
}

在每个控制器中。

2 个答案:

答案 0 :(得分:1)

您可以将该功能附加到父(根)范围,但使用服务是在控制器之间共享代码的首选方式。

您可以在控制器中调用myService.init($scope),该函数可以将属性附加到范围,但更有可能您希望使用从中继承的父控制器。

答案 1 :(得分:1)

您可以在顶级“控制器”中声明共享功能,也可以在示例中提到的“服务”中声明共享功能。到目前为止还没有其他更好的方法。

您可以将范围分配给全局变量,该变量将全局公开该范围,但其行为方式与“service”相同,除非您不必像服务那样​​注入它,而是可以通过globalVar.dosomething调用()。