2016-03-20 58 views
0

我上AngularJs應用程序的工作,我使用的是指令和控制範圍子頭/尾爲空

指令負責獲取心滿意足的列表,然後選擇國家城市的新列表產生

現在我想進行編輯的場景,所以我的狀態和所選擇的城市,但我想將其設置爲指令範圍

controller.js

if($scope.$$childHead && $scope.$$childHead.changeState){ 
    $scope.$$childHead.state=$rootScope.state; 
    $scope.$$childHead.changeState($rootScope.state) 
    $scope.$$childHead.city=$rootScope.city; 
    } 

directive.js

app.directive('w34UsAddress', function ($http,$rootScope) { 
return { 
    restrict: "A", 
    scope: { 
     state: '=', 
     city: '=', 
     changeState:'&' 
    }, 
    templateUrl:'templates/usAddress.html' , 
    link: function (scope,elem, attr) { 
      scope.states = [ 
       { 
        id: "AL", 
        name: "Alabama" 
       }, 
       { 
        id: "AK", 
        name: "Alaska" 
       }, 
       { 
        id: "AS", 
        name: "American Samoa" 
       }, 
       { 
        id: "AZ", 
        name: "Arizona" 
       }, 
       { 
        id: "AR", 
        name: "Arkansas" 
       }, 
       { 
        id: "CA", 
        name: "California" 
       }, 
       { 
        id: "CO", 
        name: "Colorado" 
       } 
] 


    scope.changeState = function (stateIndex) { 


     $http({ 
      method:'GET', 
      url:'cities.json', 
      dataType:'jsonp' 
     }).success(function (cities) { 

     scope.cities = cities[stateIndex]; 

     $rootScope.loading = false; 


     }) 

      } 
     } 
} 
    }) 

當我嘗試console.log($scope.$$schildHead)返回null

但是當它成爲console.log($scope)我發現$$schildHead裏面並具有我所需要的屬性,

任何人都可以幫助。提前致謝!

回答

1

雙美元$$事情是Angular內部的,如果可能(即幾乎總是),不應該在生產中使用。

爲什麼$scope.$$childHead可能是null(以及爲什麼它不應該用於除測試和黑客攻擊之外的其他原因之一)的原因是Angular範圍和編譯工作的方式。有$scope.$parent但沒有$scope.$children。這是因爲範圍層次結構是以驚人的等級方式構建的。

控制器和預鏈接功能從父母到孩子執行。控制者是能夠獲得指令範圍的最早點。孩子們和他們的範圍還沒有到。

後鏈接(link)功能是從兒童執行到父母。如果有一個地方,父母可以確定孩子和他們的範圍已經準備好(除了需要額外參與$timeout的情況),那就是他們的第一個摘要週期。

需要在指令中使用$scope.$$childHead表示發生了一些不好的設計決策。該指令需要重構通過使用指令通信的推薦方式:

  • 雙向=綁定兒童指令
  • 背景&綁定兒童指令
  • require d父控制器兒童指令
  • 事件$emit/$broadcast(不建議用於隔離範圍,因爲範圍層次結構錯誤)