0

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

在每个控制器中。

4

2 回答 2

1

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

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

于 2013-10-15T09:07:22.030 回答
1

您可以在顶级“控制器”或“服务”中声明共享函数,就像您在示例中提到的那样。到目前为止没有其他更好的方法。

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

于 2013-10-15T09:14:00.310 回答