Atribuir dinamicamente o modelo ng

Eu estou tentando gerar um conjunto de checkboxs de seleção de uma matriz de object. Eu pretendo que as checkboxs de seleção mapeiam dinamicamente seu modelo ng para uma propriedade do novo object que será submetido ao array.

O que eu tinha em mente é algo como

  • Isso não funciona como pode ser visto neste JSFiddle:

    http://jsfiddle.net/GreenGeorge/NKjXB/2/

    Alguém pode ajudar?

    Isso deve dar a você os resultados desejados:

      

    Aqui está um plunk de trabalho: http://plnkr.co/edit/ALHQtkjiUDzZVtTfLIOR?p=preview

    EDITAR Como observado corretamente nos comentários usando isto com ng-change, é necessário que um modelo ng “fictício” esteja presente com antecedência. Deve-se notar, no entanto, que aparentemente com 1.3 as opções requeridas foram fornecidas pelo framework. Por favor, confira https://stackoverflow.com/a/28365515/3497830 abaixo! /EDITAR

    Apenas no caso de você estar como eu tropeçando em um caso simples enquanto está tendo uma tarefa mais complexa, esta é a solução que eu criei para vincular expressões arbitrárias dinamicamente ao ng-model: http://plnkr.co/edit/ccdJTm0zBnqjntEQfAfx?p = preview

    Método: Eu criei uma diretiva dynamicModel que usa uma expressão angular padrão, avalia e vincula o resultado ao escopo via ng-model e $ 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); }); } }; }]); 

    O uso é simplesmente dynamic-model = “angularExpression”, onde angularExpression resulta em uma string que é usada como a expressão para ng-model.

    Espero que isso resgate a dor de cabeça de ter que criar essa solução.

    Atenciosamente, Justus

    Com o Angular 1.3, você pode usar a diretiva ng-model-options para atribuir dinamicamente o modelo ou vincular-se a uma expressão.

    Aqui está um plunkr: http://plnkr.co/edit/65EBiySUc1iWCWG6Ov98?p=preview

     

    Mais informações sobre ngModelOptions aqui: https://docs.angularjs.org/api/ng/directive/ngModelOptions

    Esta é a minha abordagem para suportar expressões mais profundas, por exemplo, ‘model.level1.level2.value’

      

    onde item.modelPath = ‘level1.level2’ e Utility (model, ‘level1.level2’) é a function do utilitário que retorna model.level1.level2