编辑
正如注释中正确指出的那样,将其与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');
}
element.unbind();
$compile(element)(scope);
});
}
};
}]);
用法只是dynamic-model =“ angularExpression”,其中angularExpression会产生一个字符串,该字符串用作ng-model的表达式。
我希望这可以避免某人不得不提出此解决方案的麻烦。
问候,Justus