2015-01-23 3 views
0

Я хочу создать директиву, которая создает автоматически сгенерированную ngModel для каждого поля ввода и под каждым полем ввода a, которое имеет ng-привязку к ngModel элемента выше, поэтому вот директива что я сделал до сих порДинамический ngModel и ngBind с пользовательской директивой

app.directive('cmsInput', function() { 
    return { 
     restrict: 'E', 
     compile: function(element, attrs) 
     { 
      var type = attrs.type || 'text'; 
      var required = attrs.hasOwnProperty('required') ? "required='required'" : ""; 
      var htmlText = '<div class="form-group" ng-controller="DashboardController">' + 
       '<label class="col-sm-2 control-label" for="' + attrs.formId + '">' + attrs.label + '</label>' + 
        '<div class="col-sm-10">' + 
        '<input ng-model="content.'+attrs.formId +'" type="' + type + '" class="form-control" id="' + attrs.formId + '" name="' + attrs.formId + '" ' + required + '>' + 
        '<span ng-bind="content.'+attrs.formId+'"></span></div>' + 
       '</div>'; 
      element.replaceWith(htmlText); 
     } 
    } 
}) 

так это direcive дает мне входные элементы, но ngBind не работает.

вот это HTML

<!doctype html> 
<html lang="en"> 
<head> 
<title>Test Title</title> 
</head> 


<body> 
<cms-input label="Email address" form-id="emailAddress" type="email" required /></cms-input> 

<cms-input label="Name" form-id="name" type="text"/></cms-input> 

<cms-input label="Header" form-id="header" type="text"/></cms-input> 

<cms-input label="Password" form-id="password" type="password"/></cms-input> 


</body> 

</html> 
+0

Вы уверены, что ng-model отлично работает? – Ba5t14n

+0

Не уверен, действительно, как я могу проверить его в этом случае? – ziz194

+0

Возможно, вы могли бы добавить кнопку, которая вызывает функцию в вашем контроллере, которая регистрирует или предупреждает эту переменную. В качестве параметра вы можете дать 'attrs.formId', который затем выглядит (в массиве или что-то еще - Ok, я вижу, что у вас есть объекты, должен работать с' $ scope.content [id] ', когда' id' является вашим 'attrs .formId' отправлено с кнопки). Тогда вы можете проверить, действительно ли значение действительно – Ba5t14n

ответ

1

Я вижу несколько вещей здесь, но только один, который действительно вызывает проблемы, не имеющий $ scope.content инициализируется объект. Здесь вы можете увидеть рабочий пример: http://jsbin.com/bocuzi/1/edit?html,js,output

Еще одна вещь, которая могла бы вас отбросить, - это проверить все это, используя поле электронной почты и не указывая действительный адрес электронной почты. Из-за того, как работает ngModelController, он фактически не будет устанавливать значение $ scope, если оно не пройдет проверку. Ни одно из других полей не будет иметь такое ограничение, так как они используют текст или типы паролей.

Надеюсь, что это поможет.

+0

фактически инициализируется в контроллере как $ scope.content = {}; и я тестировал его не только по электронной почте, он не работает для всех полей ввода – ziz194

+0

Вы проверили мой рабочий пример и искали какие-либо другие отличия? – soydeedo

+0

Да, это почти то же самое, я не вижу различий, но все равно это не работает ... – ziz194

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