CHỈNH SỬA
Như đã lưu ý chính xác trong các nhận xét sử dụng điều này với ng-change, yêu cầu một ng-model "dummy" phải có trước. Tuy nhiên, cần lưu ý rằng rõ ràng với 1.3, các tùy chọn bắt buộc đã được cung cấp bởi khuôn khổ. Vui lòng kiểm tra https://stackoverflow.com/a/28365515/3497830 bên dưới!
/BIÊN TẬP
Đề phòng trường hợp bạn giống như tôi vấp phải một trường hợp đơn giản trong khi có một nhiệm vụ phức tạp hơn, đây là giải pháp mà tôi đưa ra để liên kết động các biểu thức tùy ý với ng-model: http://plnkr.co/edit/ccdJTm0zBnqjntEQfAfx?p = xem trước
Phương pháp: Tôi đã tạo một dynamicModel chỉ thị lấy một biểu thức góc chuẩn, đánh giá nó và liên kết kết quả với phạm vi thông qua ng-model và $ 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);
});
}
};
}]);
Cách sử dụng đơn giản là dynamic-model = "angleExpression" trong đó angleExpression dẫn đến một chuỗi được sử dụng làm biểu thức cho ng-model.
Tôi hy vọng điều này giúp ai đó đỡ đau đầu khi phải nghĩ ra giải pháp này.
Trân trọng, Justus