Nano Hash - криптовалюты, майнинг, программирование

Передать значение от одного контроллера к другому из представления

Допустим, у меня есть страница просмотра и страница сведений. У меня также есть контроллер просмотра и контроллер деталей. На странице просмотра отображается список лиц. Когда пользователь щелкает ссылку человека, я передаю person.id на страницу сведений в качестве параметра строки запроса. Здесь все хорошо.

Теперь у меня есть другое представление, в котором обзор и детали должны быть на одной странице. Как передать person.id из одного div (с ng-controller='BrowseCtrl') в другой div (с ng-controller='DetailCtrl')?

Цель состоит в том, чтобы сделать контроллеры как можно более универсальными.

 function BrowseCtrl($scope) {
        $scope.persons = db.getPersons();
        $scope.getPerson = function (personId) {
            $location.path('/person').search({
                id: personId;
            });
        };
    }

    function DetailCtrl($scope, $location) {
        $scope.person = db.getPerson($routeParams.id);
    }

    //singlepage.html
     <div ng-controller="BrowseCtrl"> 
          <ul id="thumbList">
             <li ng-repeat="person in persons">
               <img ng-src="{{person.photo}}" ng-click="getPerson(person.id)"/>
             </li>
          </ul>
    </div>
    <div ng-controller="DetailCtrl">
       Name: {{person.name}} 
    </div>
09.05.2013

  • Зачем вам нужно передавать person.id в качестве параметра строки запроса? Конечно, вы создаете одностраничное приложение, вам не нужно больше одной страницы. 09.05.2013
  • URL-адрес выглядит примерно так: index.html#view/person?id=1. Должно было быть index.html#view/person/1? Если да, то как мне получить идентификатор человека? Предположим, я не передаю строку запроса. Как вызвать метод в DetailCtrl из представления, находящегося в области действия BrowseCtrl? 09.05.2013

Ответы:


1

Вы можете использовать следующие методы: $broadcast() и $on() для связи между двумя вашими контроллерами.

function BrowseCtrl($scope, $rootScope) {
    $scope.persons = db.getPersons();
    $scope.getPerson = function (personId) {
       $rootScope.$broadcast("personId", personId);
    };
}


function DetailCtrl($scope, $location) {
    $scope.$on("personId", function(event, id){
       $scope.person = db.getPerson(id);
    }
}

Пример jsfiddle

Но в идеале создание службы, совместно используемой двумя контроллерами, — это лучший способ справиться с проблемами в целом.

09.05.2013
  • Спасибо, Марк. В последнее время я много слышу об услугах. Я посмотрю. Моя цель — сделать контроллеры как можно более универсальными для обработки нескольких представлений. 09.05.2013

  • 2

    Используйте это внутри области 1-го контроллера:

            var div = document.querySelector('#Controller2');
            var scope = angular.element(div).scope();
            scope.myVal = true; //access the value of the 2nd controller
    
    26.06.2013
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..