2016-06-09 69 views
1

我試圖將城市對象推送到父控制器中的數組。答覆是「無法讀取屬性」未定義「推」。無論如何解決這個問題?將數據從子控件推送到父控制器[angularjs]

ChildCtrl嵌套在ParentCtrl中。

<!DOCTYPE html> 
 
<html lang="en" ng-app="citieApp"> 
 

 
<body> 
 
    <div class="container"> 
 
    <div ng-controller="ParentCtrl"> 
 
     {{cites to be listed here ON UPDATE from the child controller}} 
 

 

 
     <div ng-controller="ChildCtrl"> 
 
     <form> 
 
      <!--This inputs are to insert cities--> 
 
      <input type="text"> 
 
      <input type="text"> 
 
      <input type="text"> 
 
      <button>Submit Cities</button> 
 
     </form> 
 
     </div> 
 
    </div> 
 
    </div> 
 
</body> 
 

 
</html>

function ParentCtrl($scope) { 
 
    $scope.cities = [{ 
 
    america: [{ 
 
     'alberta', 'NY', 'chicago', 'LA' 
 
    }, { 
 
     'atlanta', 'New town', 'boston', 'boulder' 
 
    }, { 
 
     'dallas', 'austin', 'denver', 'colombus' 
 
    }] 
 
    }, { 
 
    europe: [{ 
 
     'london', 'paris', 'Helsinki' 
 
    }, { 
 
     'berlin', 'rome', 'tallin' 
 
    }, { 
 
     'lisbon', 'amsterdam', 'brussels' 
 
    }] 
 
    }]; 
 
}; 
 

 
function ChildCtrl($scope) { 
 
    $scope.cities.europe.push({ 
 
    'barcelona', 'madrid', 'manchester' 
 
    }); 
 
}

我試圖推城市反對陣列中的父控制器。答覆是「無法讀取屬性」未定義「推」。無論如何解決這個問題?

+0

如何在2個控制器交互(嵌套在另一個即一種觀點認爲,一個孩子從模態父控制器打開等)? – jbrown

+0

子視圖嵌套在父級內。 –

+1

請張貼您的標記。能夠看到指令如何嵌套以瞭解爲什麼$ scope的這個屬性不被繼承是很重要的。 –

回答

0

嘗試通過$ parent訪問它。

function ChildCtrl($scope) { 
    $scope.$parent.cities.europe.push({ 
    'barcelona', 'madrid', 'manchester' 
    }); 
} 
0

在您的代碼:

function ParentCtrl($scope) { 
    $scope.cities = [{ 
     america: [{ 
      'alberta', 'NY', 'chicago', 'LA' 
     }, { 
      'atlanta', 'New town', 'boston', 'boulder' 
      }, { 
      'dallas', 'austin', 'denver', 'colombus' 
      }] 
     }, { 
      europe: [{ 
      'london', 'paris', 'Helsinki' 
      }, { 
     'berlin', 'rome', 'tallin' 
     }, { 
      'lisbon', 'amsterdam', 'brussels' 
     }] 
    }]; 
}; 

這裏,

$scope.cities[0] = { 
     america: [{ 
      'alberta', 'NY', 'chicago', 'LA' 
     }, { 
      'atlanta', 'New town', 'boston', 'boulder' 
      }, { 
      'dallas', 'austin', 'denver', 'colombus' 
      }] 
     }; 


    $scope.cities[1] = { 
     { 
      europe: [{ 
      'london', 'paris', 'Helsinki' 
      }, { 
     'berlin', 'rome', 'tallin' 
     }, { 
      'lisbon', 'amsterdam', 'brussels' 
     }] 
    }; 

但在你clild控制器您使用::

function ChildCtrl($scope) { 
     $scope.cities.europe.push({ 
     'barcelona', 'madrid', 'manchester' 
     }); 
    } 

數據轉換爲europe對象,但europe對象在$scope.cities中不可用。你可以改變你$scope.cities像下面給出:

$scope.cities = { 
     america: [{ 
      'alberta', 'NY', 'chicago', 'LA' 
     }, { 
      'atlanta', 'New town', 'boston', 'boulder' 
      }, { 
      'dallas', 'austin', 'denver', 'colombus' 
      }], { 
      europe: [{ 
      'london', 'paris', 'Helsinki' 
      }, { 
       'berlin', 'rome', 'tallin' 
      }, { 
      'lisbon', 'amsterdam', 'brussels' 
      }] 
    }; 
相關問題