Je suis nouveau sur angular js. Dans mon code, un sélecteur de couleur est initialisé à partir d'un champ de texte. L'utilisateur modifie la valeur de la couleur et je souhaite que cette couleur soit reflétée en tant qu'arrière-plan du texte Cela ne marche pas. Qu'est-ce qui manque?
HTML:
<body ng-app="">
<input type="button" value="set color" ng-click="myStyle={color:'red'}">
<input type="button" value="clear" ng-click="myStyle={}">
<input type="text" name="abc" class="color" ng-change="myStyle={color:'green'}">
<br/>
<span ng-style="myStyle">Sample Text</span>
<pre>myStyle={{myStyle}}</pre>
</body>
Plunker - http://plnkr.co/edit/APrl9Y98Em0d6rxuzRDE?p=preview
Cependant, quand je le change en ng-click
Ça marche.
ng-change nécessite ng-model,
<input type="text" name="abc" class="color" ng-model="someName" ng-change="myStyle={color:'green'}">
J'ai le même problème, mon modèle est contraignant à partir d'une autre forme, j'ai ajouté ng-change
et ng-model
et ça ne marche toujours pas:
<input type="hidden" id="pdf-url" class="form-control" ng-model="pdfUrl"/>
<ng-dropzone
dropzone="dropzone"
dropzone-config="dropzoneButtonCfg"
model="pdfUrl">
</ng-dropzone>
Une entrée #pdf-url
obtient les données de dropzone (liaison par deux manières), cependant, ng-change
ne fonctionne pas dans ce cas. $scope.$watch
est une solution pour moi:
$scope.$watch('pdfUrl', function updatePdfUrl(newPdfUrl, oldPdfUrl) {
if (newPdfUrl !== oldPdfUrl) {
// It's updated - Do something you want here.
}
});
J'espère que cette aide.
Quand vous voulez éditer quelque chose dans Angular vous devez insérer un ngModel dans votre html
essayez ceci dans votre échantillon:
<input type="text" name="abc" class="color" ng-model="myStyle.color">
Vous n'avez pas besoin de regarder le changement du tout!
On peut aussi lier une fonction avec ng-change
écouteur d’événements, s’ils doivent exécuter une logique un peu plus complexe.
<div ng-app="myApp" ng-controller="myCtrl">
<input type='text' ng-model='name' ng-change='change()'>
<br/> <span>changed {{counter}} times </span>
</div>
...
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
$scope.name = 'Australia';
$scope.counter = 0;
$scope.change = function() {
$scope.counter++;
};
});
Peut-être que vous pouvez essayer quelque chose comme ça:
Utiliser une directive
directive('watchChange', function() {
return {
scope: {
onchange: '&watchChange'
},
link: function(scope, element, attrs) {
element.on('input', function() {
scope.onchange();
});
}
};
});
Tout d’abord, je vois votre code et vous n’avez pas de contrôleur. Donc, je suggère que vous utilisez un contrôleur. Je pense que vous devez utiliser un contrôleur parce que votre variable {{myStyle}}
n'est pas compilé car les 2 accolades sont visibles et ne devraient pas l'être.
Deuxièmement, vous devez utiliser ng-model pour votre entrée. Cette directive liera la valeur de l'entrée à votre variable.