在现有元素上绑定新的ngModel

时间:2015-03-31 17:56:59

标签: angularjs-directive

假设我有类似的东西:

<input ng-model="object.properties.property_name" options="{ updateOn: 'blur' }" ng-change="object.save('property_name')">

我希望这样做真的很短:

<input name="property_name" autosave="object">

但要做到这一点,我需要动态地将ngModel绑定到现有输入。到目前为止,我已经缩短了它,看起来像这样:

<input ng-model="object.properties.property_name" name="property_name" autosave="object">

这是让我走得那么远的指令:

.directive('autosave', [function() {
    return {
        restrict: 'A',
        scope : {
            autosave : '=',
        },
        link: function(scope, element, attrs) {
            element.bind('change', function(){
                scope.autosave.save(attrs.name);
            });
        }
    }
}])

如何将scope.autosave.properties[attrs.name]动态添加到ngModel并将其绑定到输入标记?

1 个答案:

答案 0 :(得分:0)

我还没有找到创建模型的方法,这是原始问题,但我通过从模型中提取属性名称来缩短它:

<input ng-model="object.properties.property_name" autosave="object">

和这个指令

.directive('autosave', [function() {
    return {
        restrict: 'A',
        scope : {
            autosave : '=',
        },
        link: function(scope, element, attrs) {
            element.bind('change', function(){
                var property_name = attrs.ngModel.match(/(?=[^.]*$)(\w+)/)[1];
                scope.autosave.save(property_name);
            });
        }
    }
}])

它并不理想,但情况会更好。