2015-09-23 3 views
0

Я не знаю, как получить доступ к данным из вложенного (дочернего) контроллера.Угловой вложенный контроллер Доступ к данным

<form ng-controller="TestController as test" ng-submit="submit()"> 
     <h5>Employee name :</h5> 
     <div ng-controller="mainCtrl" class="row-fluid"> 
      <form class="row-fluid"> 
       <div class="container-fluid"> 
        <input type="text" ng-model="name" typeahead="name for name in names | filter:$viewValue" /> 
       </div> 
      </form> 
     </div> 
     <h5>Comment : </h5> 
     <textarea ng-model="test.test_content"></textarea> 
     <input type="submit" id="submit" value="Submit" /> 
    </form> 

Как вы можете видеть, у меня есть 2 controllers.The основным является форма, второй из них является поле ввода, которое позволяет пользователю искать имя в списке, используя машинописный.

Я хочу иметь доступ к содержимому ng-model = "name" в моем дочернем контроллере (mainctrl) в моем TestController.

Я попытался получить к нему доступ напрямую с $ scope.name, но он не работает. Я также пробовал test.name как модель ng, и он тоже не работал.

Я отправляю данные своего TestController на свой сервер и хочу отправить данные (имя) из моего mainCtrl, а также непосредственно из TestController. Поэтому, когда мой пользователь нажимает кнопку отправки, он отправляет имя + test_content в запрос $ http.post.

Кто-нибудь знает, как это сделать?

Благодаря

я нашел это, но это не реально помочь .. https://fdietz.github.io/recipes-with-angular-js/controllers/sharing-models-between-nested-controllers.html

редактировать:

мой поиск контроллер

  .controller("mainCtrl", function ($scope, $http) { 
     $scope.selected = ''; 
     $http.get('/feedbacks/search.json'). 
     then(function(response) { 
     $scope.succes = " ok " 
     $scope.names = response.data; 
     // this callback will be called asynchronously 
     // when the response is available 
     }, function(response) { 
     // called asynchronously if an error occurs 
     // or server returns response with an error status. 
      $scope.succes = " error" 
     }); 
    }); 

моя форма контроллер:

angular.module('FeedbackTool') 
    .controller('TestController',['$scope', '$http', function($scope,$http) { 
     $http.get('/feedbacks.json'). 
         then(function(response) { 
          $scope.succes = " ok " 
          $scope.list = response.data; 
          // this callback will be called asynchronously 
          // when the response is available 
         }, function(response) { 
          // called asynchronously if an error occurs 
          // or server returns response with an error status. 
                 $scope.succes = " error" 
         }); 
     $scope.submit = function() { 
       $http.post('/feedbacks.json', { data:this.test }). 
         then(function(response) { 
       $scope.succes = 'sent'; 
          // this callback will be called asynchronously 
          // when the response is available 
         }, function(response) { 
          // called asynchronously if an error occurs 
          // or server returns response with an error status. 
              $scope.succes = 'fail'; 

         }); 
      }; 
    }]); 
+0

Можете ли вы разместить свой код контроллера? –

ответ

0

Поля родителя доступны изнутри дочерней области, но область дочернего объекта недоступна из родителя. Как правило, это относится к назначению значений из области дочерних объектов свойствам, уже определенным в родительском. В вашем случае, я думаю, вам просто нужно использовать test.name в качестве выражения ng-model.

+0

Да, я уже тестировал это, и он не работает. На самом деле моя форма больше не отправляется. Так что я думаю, что мой лучший выбор - объединить обоих контроллеров в один, чтобы я больше не писал эту проблему, но будет грязно смотреть на – jayD

+0

Без кода контроллера это сложно чтобы рассказать, в чем проблема. Прежде чем перейти к архитектуре, которую вы не хотите, я бы рекомендовал проверить это: http://www.angularjshub.com/examples/basics/nestedcontrollers/ –

+0

Я просто обновляю сообщение с обоими моими контроллерами. Я разделил его на 2 контроллера только ради ясности. Я действительно не думал, что будут проблемы tbh, спасибо за ссылки, которые кажутся полезными. – jayD

Смежные вопросы