Ich habe eine Direktive Rendering-Eingaben basierend auf einer Konfiguration vom Server gesendet. Bis auf den 'Select'-Eingang funktioniert alles gut. Egal was ich versuche, das ng-Modell wird nicht aktualisiert. Ich habe meinen Code viel zu isolieren, um das Problem getrimmt:ngModel nicht aktualisieren in auswählen
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>
Eine Arbeits Plunker steht zur Verfügung: http://plnkr.co/edit/mNBTJzZXjX6mLyPz6NCI?p=preview
Sie tun habe irgendwelche Ideen, warum das ng-Modell in der Auswahl nicht aktualisiert wird?
EDIT: Was ich erreichen möchte, ist die Aktualisierung der Variable "inner.backup_frequency" (der Verweis auf mein Datenobjekt von meiner Fabrik DynamicData zurückgegeben). Wie Sie im Plocker sehen können, wird die im ng-Modell enthaltene Variable nicht aktualisiert, wenn ich die Option in der Auswahl ändere.
Vielen Dank für Ihre Zeit.
wollen Sie dass'
'jedes Mal anders zu sein, die ich klicken. oder den Wert in den Optionen, um gültig zu sein .. bitte erklären Sie –
Hallo, haben Sie versucht, das Ereignis on change auf der Auswahl und in Javascript die $ scope.varailable und als $ scope. $ apply() nur um zu sehen wenn es etwas damit zu tun hat, dass das Element außerhalb der $ Digest-Schleife liegt? – Andreas
Siehe http://stackoverflow.com/a/22890796/446030 bezüglich der Reihenfolge der Kompilierung und Platzierung innerhalb des Doms. – JcT