Par*_*osh 5 angularjs angular-ngmodel
我有一个组合框ng-model='languale'.我也有一个预定义的列表'English', 'French', 'German' and 'Other'
如果我选择Other选项,则需要出现另一个文本框.我已经实现了这个功能ng-show.
现在我的问题是在我的JSON结构中,只有一个语言提交如下
var peopleData = {
language : 'English'
}
Run Code Online (Sandbox Code Playgroud)
因此,我无法ng-model='peopleData.language'在select和textbox中同名.
由于我的后端开发人员不希望在JSON中添加额外的属性.所以我必须以不同的方式处理它.我不想在向服务发送数据时创建任何逻辑(创建或管理JSON结构).
那么有什么方法可以解决这个问题吗?
注意:我知道我可以使用,$scope.$watch但我仍在寻找更好的解决方案,例如从自己查看完全处理,否则可能是性能问题.
写一个简单的指令怎么样?
HTML:
<select ng-model="ctrl.main" f-model="peopleData.language" ng-options="i as i for i in langs"></select>
<input type="text" ng-model="ctrl.extra" f-model="peopleData.language" ng-if="ctrl.main == 'Other'">
Run Code Online (Sandbox Code Playgroud)
JS:
app.directive('fModel', [function() {
return {
restrict: 'A',
require: 'ngModel',
scope: {
fModel: '='
},
link: function(scope, element, attrs, ngModel) {
var handler = function(val) {
var newVal = angular.copy(val || scope.fModel || '');
scope.$applyAsync(function() {
scope.fModel = newVal;
});
return newVal;
}
ngModel.$parsers.push(handler);
ngModel.$formatters.push(handler);
},
};
}]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1318 次 |
| 最近记录: |