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

例で述べたように、トップレベルの「コントローラー」または「サービス」で共有関数を宣言します。今のところ他に良い方法はありません。

スコープをグローバル変数に割り当てると、そのスコープがグローバルに公開されますが、「サービス」と同じように動作しますが、サービスのように注入する必要はなく、globalVar.dosomething() で呼び出すことができます。

于 2013-10-15T09:14:00.310 に答える
1

関数を親 (ルート) スコープにアタッチできますが、コントローラー間でコードを共有するには、サービスを使用することをお勧めします。

コントローラーで呼び出すことができmyService.init($scope)、その関数はプロパティをスコープに追加できますが、継承元の親コントローラーを使用する可能性が高くなります。

于 2013-10-15T09:07:22.030 に答える