2014-12-12 7 views
1

Фон: У меня есть инструмент AngularJs, как приложение с 3 шагами. Шаги мастера содержат 4 состояния uiRouter, в которых используется один контроллер. Первое состояние - это абстрактный вид, содержащий навигацию на основе бутстрапа с ui-view в качестве заполнителя для других 3 вложенных состояний. 3 вложенных состояния имеют отдельные представления, которые содержат уникально названные формы. Я хотел бы управлять навигацией по таблеткам в родительском состоянии, проверяя, действительна ли текущая видимая форма; если форма недействительна, я бы скрыть/отключить возможность для пользователя щелкнуть следующую таблетку навигации.Как обратиться к форме от контроллера

Примечание: Я использую синтаксис «контроллер как», объявленный в состояниях uiRouter.

Вопрос: Кажется, я не могу получить ссылку на текущую видимую форму из контроллера.

Вот что я пытался: 1. Передает ссылку на форму видимой форме в вызове инициализации -> получает Неизвестная ошибка при попытке записи в консоль 2. переименовании формы и даже переходя в ссылка сфера, как описано в этой ссылке: http://www.technofattie.com/2014/07/01/using-angular-forms-with-controller-as-syntax.html

Демонстрация: Вот ссылка plnkr показывает, что намерения: http://plnkr.co/edit/YUnwoBD2dt4bzbfujJSW

контроллер код:

(function() { 
    'use strict'; 

    angular 
     .module('recquisitionManagement') 
     .controller('RecquisitionEditCtrl', [RecquisitionEditCtrl]); 

    function RecquisitionEditCtrl() { 

     var vm = this; 

     // get ref to request form 
     vm.setRequestForm = function(form) { 
      vm.requestForm = form; 
      console.log(form); 

      // tried to call from form ng-init --> undefined response 
     } 

     // console.log($scope.vm.requestForm); 
     // console.log(vm.requestForm); 

     vm.recquisition = { id: 0, name: 'some name', date: 'date here' }; 
     vm.requestFormIsInvalid = true; //this.requestForm.$valid; 
     vm.approvalFormIsInvalid = true; 


     if (vm.recquisition && vm.recquisition.id > 0) { 
      vm.title = 'Edit'; 
     } else { 
      vm.title = 'Create'; 
     } 
    } 
}()); 

Любые предложения о том, как получить необходимую форму ссылки?

ответ

0

Несколько вариантов описаны здесь: Can I access a form in the controller?

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

+0

Я пробовал варианты, найденные в ссылке; они, похоже, не работают по моему сценарию. Не могли бы вы прояснить комментарий к именованию? это соглашение об именах, вызывающее проблему? – mwhib

0

бит поздно теперь я понимаю, но вы проезжали Ctrl как массив, необходимо изменить следующим образом:

.controller('RecquisitionEditCtrl', [RecquisitionEditCtrl]); 

к этому:

.controller('RecquisitionEditCtrl', RecquisitionEditCtrl); 
0

да вот так:

<form name="vm.theFormName"> 

вы можете получить к нему доступ через vm