33

これが私のコードです:

function ParentCtrl($scope) {
$scope.people = ["Tom", "Dick", "Harry"];
$scope.count = $scope.people.length;
}

function ChildCtrl($scope) {
$scope.parentpeople = ParentCtrl.people //this is what I would like to do ideally
}

controllerある角度を別の角度の内側にネストしています。最初の変数を2番目の変数に渡したいのですがcontroller。誰かがこれを行う方法を知っていますか?

ノート

私は次のようなことはできません

ChildCtrl.prototype = new ParentCtrl();

peopleのプロパティを上書きするためChildCtrlです。

4

5 に答える 5

46

デフォルトでは、子スコープは通常、親スコープから継承するため(スコープを参照)、子内の親コントローラーの$scopeプロパティに既にアクセスできます。それを証明するには:

function ChildCtrl($scope) {
    alert($scope.people)
}
于 2012-08-18T14:56:27.290 に答える
25

あなたは物事を間違えています。コントローラーの継承とスコープの継承を混在させていますが、AngularJSではそれらが異なり、緩く結合されています。

あなたが実際に欲しいのは:

function ParentCtrl($scope) {
    $scope.people = ["Tom", "Dick", "Harry"];
    $scope.count = $scope.people.length;
}

function ChildCtrl($scope) {
    $scope.parentpeople = $scope.$parent.people;
}

そしてそれはケースのために働くでしょう:

<div ng-controller="ParentCtrl">
    <div ng-controller="ChildCtrl">
    </div>
</div>

しかし、Markとganarajが上で気づいたように、ParentCtrlとChildCtrlの両方から$ scope.peopleのプロパティにアクセスできるため、これは意味がありません。

コントローラーを相互に継承する場合は、コントローラー関数自体のプロトタイプ継承を使用する必要があります。

于 2012-10-04T14:33:55.450 に答える
9

$ scopeの継承は、ng-controllerを使用してコントローラーを参照する場所に基づいています。

あなたがのようなものを持っているなら

<div ng-controller="ParentController">
    <div ng-controller="ChildController">
    </div>
</div>

そうすると、子コントローラーは親コントローラーのプロパティを継承します。

注:子コントローラーは、htmlの直接の子で定義する必要はありません。内のどの子でもかまいません。

于 2012-08-17T15:24:02.933 に答える
4

また、DOMによって任意のコントローラーのスコープを取得できます。

$needleScope = angular.element(aDomElement).scope()

jQueryの使用:

$needleScope = $('#aDomElementId').scope()

または、ドキュメント内のすべてのスコープを取得します。

$allScopes = $('.ng-scope').scope()
于 2014-02-12T19:44:32.360 に答える
0

それはあなたを助けるかもしれません!!!

スコープは、コントローラーとビューを接続する特別なJavaScriptオブジェクトです。スコープにはモデルデータが含まれています。コントローラでは、モデルデータは$scopeオブジェクトを介してアクセスされます。

<script>
      var mainApp = angular.module("mainApp", []);

      mainApp.controller("shapeController", function($scope) {
         $scope.message = "In shape controller";
         $scope.type = "Shape";
      });
</script>

スコープの継承スコープはコントローラー固有です。ネストされたコントローラーを定義すると、子コントローラーはその親コン​​トローラーのスコープを継承します。

<script>
      var mainApp = angular.module("mainApp", []);

      mainApp.controller("shapeController", function($scope) {
         $scope.message = "In shape controller";
         $scope.type = "Shape";
      });

      mainApp.controller("circleController", function($scope) {
         $scope.message = "In circle controller";   
      });
</script>

以下に示すような実例。

<html>
    <head>
       <title>Angular JS Forms</title>
    </head>
    <body>
       <h2>AngularJS Sample Application</h2>
       <div ng-app="mainApp" ng-controller="shapeController">
          <p>{{message}} <br/> {{type}} </p>
          <div ng-controller="circleController">
             <p>{{message}} <br/> {{type}} </p>
          </div>
          <div ng-controller="squareController">
             <p>{{message}} <br/> {{type}} </p>
          </div>
       </div>
       <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js"></script>
       <script>
          var mainApp = angular.module("mainApp", []);

          mainApp.controller("shapeController", function($scope) {
             $scope.message = "In shape controller";
             $scope.type = "Shape";
          });

          mainApp.controller("circleController", function($scope) {
             $scope.message = "In circle controller";   
          });

          mainApp.controller("squareController", function($scope) {
             $scope.message = "In square controller";
             $scope.type = "Square";
          });

       </script>
    </body>
    </html>
于 2015-02-21T06:03:35.203 に答える