1. 程式人生 > >angular中ng-controller父子級

angular中ng-controller父子級

ng-controller 指令用於為你的應用新增控制器。

在控制器中,你可以編寫程式碼,製作函式和變數,並使用 scope 物件來訪問。
當有兩個控制器father、child且child 在 father內,那child 可以稱為子控制器,它將繼承父控制器father的scope。child就可以訪問到father的scope中的所有函式和變數。

<div ng-controller="father">
    <div >name1:{{ name1 }}</div>
    <div ng-controller="child"
>
name2:
{{ name2 }}</div> </div>

情況1:

app.controller("father",function ($scope) {
    $scope.name1 = "x";
    $scope.name2 = "y";
});

頁面顯示結果:
name1:x
name2:y

情況2:

app.controller("child",function ($scope) {
    $scope.name1 = "a";
    $scope.name2 = "b";
});

頁面顯示結果:
name1:
name2:b:

情況3:

app.controller("father",function ($scope) {
   if($scope.name1){
       $scope.name1 += "!";
       console.log($scope.name1);
   } else {
       $scope.name1 = "@";
       console.log($scope.name1);
   }

   if($scope.name2){
       $scope.name2 += "#";
       console.log($scope.name2);
   } else
{ $scope.name2 = "$"; console.log($scope.name2); } console.log("father"); }); app.controller("child",function ($scope) { if($scope.name1){ $scope.name1 += "%"; console.log($scope.name1); } else { $scope.name1 = "^"; console.log($scope.name1); } if($scope.name2){ $scope.name2 += "&"; console.log($scope.name2); } else { $scope.name2 = "*"; console.log($scope.name2); } console.log("child"); });

控制檯列印結果:

@
$
father
@%
$&
child

頁面顯示結果:

name1:@
name2:$&

可以看出name1的頁面顯示結果與控制檯列印結果不一致

結論:
父級控制器先執行而子級控制器後執行。父級和子級控制器都可對父級下scope作用域進行訪問操作,但當子級控制器嘗試處理父級作用域內、子級作用域外的資料則可能會導致父級中的資料變髒。