2016-11-17 2 views
0

У меня есть компонент с ng-формой. Я хочу динамически установить имя ng-формы, чтобы я за пределами компонента мог легко получить доступ к значению ng-form.Как установить динамическое имя в ng-форме

Пример:

<form name="formName"> 
<component name="componentName"></component> 
</form> 

И внутри компонента У меня есть

<ng-form name="{{$ctrl.name}}"> 
// Some inputs with special validation 
</ng-form> 

Но каждый раз, когда я пытаюсь получить доступ к $ ctrl.name внутри мой компонент не определен, или просто строка не форма с входами внутри.

Я использую Машинопись:

@Component(app, { 
    selector: 'component', 
    templateUrl: 'templateUrl', 
    bindings: { 
    value: '=?ngModel', 
    name: '@', 
    required: '=?ngRequired', 
    disabled: '=?ngDisabled', 

    }, 
}) 
    console.log(this.name); ///A string, but no a form so I can manipulate it. 

ответ

1

Пожалуйста, попробуйте следующий пример кода

Component.js

angular.module('myApp').component('component', { 
    bindings: {    
     name: '@' 
    }, 
    template: 
    '<ng-form name={{$ctrl.name}}><input name="txtfirst" value="John"/><input type="button" ng-click="$ctrl.getFormData()"></ng-form>', 
    controller: function($scope) { 
     console.log(this.name); 

    this.getFormData = function(){ 
      console.log($scope[this.name]); 
    }   
    } 
}); 

HTML

<component name="frmNameTest"></component> 
+0

Да, код работает, но это не то, что я хочу. Я получаю строку с именем формы, и я хочу, чтобы объект формы имел динамическое имя, поэтому я могу манипулировать внутри контроллера. –

+1

Проверьте обновленный код. «$ scope [this.name]» даст объект формы. –

+0

Это работает по форме, но я хочу использовать в NG-FORM, и я не знаю, как я могу правильно использовать. –

1

Если вы хотите, чтобы объект форма будет доступна о n контроллер, а не область действия, то вы можете сделать, как указано выше, кроме объявления формы, будет

<form name="$ctrl[{{$ctrl.name}}]"> 
    ... 
</form>