从子[angularjs]将数据推送到父控制器

时间:2016-06-09 15:14:53

标签: javascript html angularjs

我试图将city对象推送到父控制器中的数组。回复是“无法读取未定义的属性'推送”。无论如何要解决这个问题?

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'
  });
}

我试图将city对象推送到父控制器中的数组。回复是“无法读取未定义的属性'推送”。无论如何要解决这个问题?

2 个答案:

答案 0 :(得分:0)

尝试通过$ parent访问它。

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

答案 1 :(得分: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'
          }]
  };