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}}"]);
};
}
모델은 말 그대로 Answers('{질문})인 것을 제외하고 모든 것이 작동합니다.평가된 답변["성별 질문"] 대신 "Name}"을 클릭합니다.어떻게 하면 그 모델명을 동적으로 설정할 수 있을까요?
javascript 표현식을 간단하게 넣을 수 있습니다.ng-model
.
이런 거 써도 돼scopeValue[field]
단, 필드가 다른 오브젝트에 있는 경우에는 다른 솔루션이 필요합니다.
모든 종류의 상황을 해결하려면 다음 명령을 사용할 수 있습니다.
this.app.directive('dynamicModel', ['$compile', '$parse', function ($compile, $parse) {
return {
restrict: 'A',
terminal: true,
priority: 100000,
link: function (scope, elem) {
var name = $parse(elem.attr('dynamic-model'))(scope);
elem.removeAttr('dynamic-model');
elem.attr('ng-model', name);
$compile(elem)(scope);
}
};
}]);
Html의 예:
<input dynamic-model="'scopeValue.' + field" type="text">
결국 이렇게 된 거야
컨트롤러 내:
link: function($scope, $element, $attr) {
$scope.scope = $scope; // or $scope.$parent, as needed
$scope.field = $attr.field = '_suffix';
$scope.subfield = $attr.sub_node;
...
따라서 템플릿에서는 하드 코드화된 특정 요소('Answers'의 경우처럼) 아래뿐만 아니라 완전히 동적인 이름을 사용할 수 있습니다.
<textarea ng-model="scope[field][subfield]"></textarea>
이게 도움이 됐으면 좋겠다.
@abourget이 제공하는 답변을 보다 완전하게 하기 위해 다음 코드 행의 scopeValue[field] 값을 정의할 수 없습니다.이로 인해 서브필드를 설정할 때 다음 오류가 발생합니다.
<textarea ng-model="scopeValue[field][subfield]"></textarea>
이 문제를 해결하는 한 가지 방법은 ng-focus="null Safe(필드)" 속성을 추가하는 것입니다. 그러면 코드가 다음과 같습니다.
<textarea ng-focus="nullSafe(field)" ng-model="scopeValue[field][subfield]"></textarea>
다음으로 다음과 같은 컨트롤러에서 null Safe()를 정의합니다.
$scope.nullSafe = function ( field ) {
if ( !$scope.scopeValue[field] ) {
$scope.scopeValue[field] = {};
}
};
그러면 scopeValue[field][subfield]로 값을 설정하기 전에 scopeValue[field]가 정의되지 않습니다.
참고: ng-change="null Safe(field)"를 사용하여 동일한 결과를 얻을 수 없습니다. ng-change는 ng-모델이 변경된 후에 발생하므로 scopeValue[field]가 정의되지 않은 경우 오류가 발생합니다.
또는 를 사용할 수 있습니다.
<select [(ngModel)]="Answers[''+question.Name+'']" ng-options="option for option in question.Options">
</select>
언급URL : https://stackoverflow.com/questions/12553617/how-can-i-set-a-dynamic-model-name-in-angularjs
'programing' 카테고리의 다른 글
경고: number_format()은 파라미터 1이 이중으로 지정되어야 하며 문자열이 지정되어야 합니다. (0) | 2023.03.12 |
---|---|
사용자 지정 Angular 지시어를 통해 템플릿을 조건부로 적용하는 방법은 무엇입니까? (0) | 2023.03.07 |
Jquery Ajax 오류 콜백 (0) | 2023.03.07 |
하위 테마의 워드프레스 하위 테마 (0) | 2023.03.07 |
웹사이트 스타일시트 복사로 법적 문제가 생길 수 있나요? (0) | 2023.03.07 |