Отправьте значение из дочернего контроллера в родительский с помощью $ emit

0

Поэтому я хочу отправить значения из выпадающего списка и ввести текстовое поле в MainController из FirstController и значения from datepickers из SecondController в MainControler. Я пытаюсь использовать $ emit и $, но без успеха. Возможно, я получаю значения от этих входов неправильно... Вы можете найти мой код ниже.

Главный контроллер

'use strict';

angular.module('app').controller('MainController', ['$scope',
 function($scope) {
  $scope.$on('send-type-id', getObjectValues);
  $scope.$on('send-date', getDateValues);

  function getObjectValues(e, selectedObjectType, inputObjectId){
   $scope.objectType = selectedObjectType;
   $scope.objectId = inputObjectId;
   console.log($scope.objectType);
   console.log($scope.objectId);
  }

  function getDateValues(e, dateFrom, dateTo){
   $scope.startDate = dateFrom;
   $scope.endDate = dateTo;
   console.log($scope.startDate);
   console.log($scope.endDate);
  } 
 }
]);

FirstController

    angular.module('app').controller('FirstController',['$scope',
   function($scope){
    $scope.$emit('send-type-id',auditDropdown, selectId);
 }
])

Вид FirstController

  <div ng-controller="SelectionController">
    <div class="well-panel">
        <div class="panel-body">
            <select class="form-control" ng-model="auditDropdown" ng-init="auditDropdown = auditDropdown || config.auditDropdown[0]"
                    ng-options="option.id as option.name for option in config.auditDropdown">
            </select>
            <input class="form-control" ng-model="selectId" type="text">

            <div ng-include="'modules/audit/views/components/audit-datepickers.client.view.html'"></div>

            <div>
                <button class="btn btn-sm btn-default" type="button">
                    {{'audit.navigation.button.generateAuditReport.btn'| translate}}
                </button>
            </div>
        </div>
</div>

файл конфигурации для параметров

 ...
 "auditDropdown": [
   {"id": "Name1", "name": "Name 1"}, 
   {"id": "Name2", "name": "Name 2"},
   {"id": "Name3", "name": "Name 3"},  
 ]
...

SecondController

 angular.module('app').controller('SecondController',['$scope',
       function($scope){
        $scope.$emit('send-date',auditDropdown, selectId);
     }
    ])

Просмотр SecondController

<div ng-controller="SecondController">
    <section id="datepickerSection">
        <div>
            <input
                    type="date"
                    ng-model="startDate"
                    class="form-control"
                    placeholder="mm/dd/yyyy"
                    datepicker-popup
                    />
        </div>
        <div>
            <input
                    type="date"
                    ng-model="endDate"
                    class="form-control"
                    placeholder="mm/dd/yyyy"
                    datepicker-popup
                    />
        </div>
    </section>
</div>

РЕДАКТИРОВАТЬ

Я получаю ошибку, что auditDropDown не определено в SecondController....

  • 0
    Зачем вам это нужно, так как изменение ng-моделей приведет к обновлению данных в родительской области видимости $? Разве вы не можете просто использовать ng-change?

1 ответ

1
Лучший ответ

Вы должны получить auditDropDown из области $scope, иначе js будет искать переменную под названием auditDropDown (то же самое для selectId):

$scope.$emit('send-type-id', $scope.auditDropdown, $scope.selectId);
$scope.$emit('send-date',$scope.auditDropdown, $scope.selectId);
  • 0
    Спасибо, чувак, я забыл о $ scope ... Кстати, могу я задать тебе, может быть, какой-то глупый вопрос? Итак, я хочу взять, например, значения для $ scope.objectType и $ scope.objectId из функции getObjectValues (). А затем использовать их в другой функции, например getOjbectValues.objectType + "asdasd" + getOjbectValues.objectID. Так что я должен изменить функцию, чтобы вернуть, возможно, какой-то объект или ?? Спасибо
  • 0
    Да, я бы изменил эти функции, чтобы они возвращали объект, а не устанавливал их в $ scope.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню