编辑
正如在使用 ng-change 的评论中正确指出的那样,需要事先存在“虚拟”ng-model。然而,应该注意的是,显然在 1.3 中,框架已经提供了所需的选项。请查看下面的https://stackoverflow.com/a/28365515/3497830!
/编辑
以防你像我一样在一个简单的案例中遇到更复杂的任务,这是我想出的将任意表达式动态绑定到 ng-model 的解决方案:http ://plnkr.co/edit/ccdJTm0zBnqjntEQfAfx?p =预览
方法:我创建了一个指令 dynamicModel,它采用标准的角度表达式,对其进行评估并通过 ng-model 和 $compile 将结果链接到范围。
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope) {
$scope.data = {};
$scope.testvalue = 'data.foo';
$scope.eval = $scope.$eval;
});
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope) {
$scope.data = {};
$scope.testvalue = 'data.foo';
$scope.eval = $scope.$eval;
});
app.directive('dynamicModel', ['$compile', function ($compile) {
return {
'link': function(scope, element, attrs) {
scope.$watch(attrs.dynamicModel, function(dynamicModel) {
if (attrs.ngModel == dynamicModel || !dynamicModel) return;
element.attr('ng-model', dynamicModel);
if (dynamicModel == '') {
element.removeAttr('ng-model');
}
// Unbind all previous event handlers, this is
// necessary to remove previously linked models.
element.unbind();
$compile(element)(scope);
});
}
};
}]);
用法很简单 dynamic-model="angularExpression" 其中 angularExpression 生成一个字符串,用作 ng-model 的表达式。
我希望这可以避免有人不得不提出这个解决方案的麻烦。
问候,贾斯图斯