Ho un input di rendering direttiva basato su una configurazione inviata dal server. Tutto funziona alla grande eccetto per l'input 'select'. Non importa cosa provo, il modello ng non si aggiorna. Ho tagliato il mio codice molto per isolare il problema:ngModel non si aggiorna in selezionare
Javascript:
var myApp = angular.module('example', []);
myApp.factory('DynamicData', [function() {
return {
data: {
backup_frequency: 604800
}
};
}])
.directive('dynamicInput',
['$compile', 'DynamicData', function($compile, DynamicData) {
/**
* Render the input
*/
var render = function render() {
var input = angular.element('<select class="form-control" ng-model="inner.backup_frequency" ng-options="option.value as option.title for option in options"></select>');
return input;
};
var getInput = function()
{
var input = render();
return input ? input[0].outerHTML : '';
};
var getTemplate = function(){
var template = '<div class="form-group">' +
'Select input ' +
'<div class="col-md-7">' + getInput() + '</div>' +
'</div>';
return template;
};
return {
restrict : 'E',
scope: {
content:'=content',
},
link : function(scope, element, attrs) {
var template = getTemplate();
scope.options = [
{title: "Daily", value: 86400},
{title: "Weekly", value: 604800},
{title: "Monthly", value: 2678400},
];
scope.inner = DynamicData.data;
console.info('inner data', scope.inner);
element.html(template);
element.replaceWith($compile(element.contents())(scope));
}
};
}])
.controller('FormCtrl', ['DynamicData', '$scope', function (DynamicData, $scope){
$scope.app = {};
$scope.save = function save() {
$scope.value = DynamicData.data.backup_frequency;
console.info('DynamicData', DynamicData.data);
};
}]);
HTML:
<head>
<script data-require="[email protected]" data-semver="1.3.8" src="https://code.angularjs.org/1.3.8/angular.js"></script>
<link href="style.css" rel="stylesheet" />
<script src="script.js"></script>
</head>
<body>
<h1>Dynamic Input :</h1>
<div data-ng-controller="FormCtrl">
<dynamic-input class="form-group" content="app"></dynamic-input>
<span data-ng-bind="value"></span><br/>
<button class="btn btn-primary" ng-click="save()">Save</button>
</div>
</body>
</html>
Un plunker di lavoro è disponibile: http://plnkr.co/edit/mNBTJzZXjX6mLyPz6NCI?p=preview
Ti hai qualche idea sul perché il modello ng nella selezione non è aggiornato?
MODIFICA: Quello che voglio ottenere è l'aggiornamento della variabile "inner.backup_frequency" (il riferimento al mio oggetto dati restituito dal mio factory DynamicData). Come puoi vedere nel plunker, ogni volta che cambio l'opzione nella selezione, la variabile contenuta nel modello ng non viene aggiornata.
Grazie per il vostro tempo.
vuoi di that'
'di essere diverso ogni volta che clicco. o il valore nelle opzioni selezionate per essere valido .. per favore spiega –
Ciao, hai provato a recuperare l'evento on change sul select e in javascript set $ scope.varaible e than $ scope. $ apply() solo per vedere se ha qualcosa a che fare con l'elemento al di fuori del ciclo $ digest? – Andreas
Vedere http://stackoverflow.com/a/22890796/446030 per quanto riguarda l'ordine di compilazione e la collocazione all'interno della dom. – JcT