Au cas où vous seriez comme moi en train de trébucher sur un cas simple alors que vous avez une tâche plus complexe, voici la solution que j'ai trouvée pour lier dynamiquement des expressions arbitraires à des ng-model : http://plnkr.co/edit/ccdJTm0zBnqjntEQfAfx?p=preview
Méthode : J'ai créé une directive dynamicModel qui prend une expression angulaire standard, l'évalue et lie le résultat à la portée via ng-model et $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);
});
}
};
}]);
L'utilisation est simplement dynamic-model="angularExpression" où angularExpression donne une chaîne qui est utilisée comme expression pour ng-model.
J'espère que cela évitera à quelqu'un de se casser la tête pour trouver cette solution.
Regards, Justus