Quiero rellenar un formulario con algunas preguntas dinámicas (violín here):¿Cómo puedo establecer un nombre de modelo dinámico en AngularJS?
<div ng-app ng-controller="QuestionController">
<ul ng-repeat="question in Questions">
<li>
<div>{{question.Text}}</div>
<select ng-model="Answers['{{question.Name}}']" ng-options="option for option in question.Options">
</select>
</li>
</ul>
<a ng-click="ShowAnswers()">Submit</a>
</div>
function QuestionController($scope) {
$scope.Answers = {};
$scope.Questions = [
{
"Text": "Gender?",
"Name": "GenderQuestion",
"Options": ["Male", "Female"]},
{
"Text": "Favorite color?",
"Name": "ColorQuestion",
"Options": ["Red", "Blue", "Green"]}
];
$scope.ShowAnswers = function()
{
alert($scope.Answers["GenderQuestion"]);
alert($scope.Answers["{{question.Name}}"]);
};
}
Todo funciona, excepto el modelo es, literalmente, "Respuestas [{{}} question.Name"], en lugar de las respuestas evaluadas ["GenderQuestion"]. ¿Cómo puedo establecer ese nombre de modelo dinámicamente?
Juro que lo intenté. Muchas gracias. De hecho, fui por una ruta diferente, y simplemente puse el modelo en cuestión. Respuesta (Voy a sacar un violín actualizado en un momento), que resultó ser una respuesta más directa (tengo que salir de la mentalidad de jQuery), pero es genial saber que puedo, de hecho, hacerlo de la manera que originalmente planeé para el futuro. ¡Gracias de nuevo! –
Fiddle actualizado: http://jsfiddle.net/2AwLM/23/ –
En caso de que esto ayude a alguien más, estaba teniendo problemas similares, pero mi problema era que estaba usando 'ng-pattern =" field.pattern "' cuando lo que realmente quería era 'pattern =" {{field.pattern}} "'.Más o menos confuso que el angular generalmente proporciona un ayudante para los atributos dinámicos, pero esta vez escribió su propia validación del lado del cliente y le dio el mismo nombre. – colllin