Ich versuche, eine Schaltfläche nach dem Laden der Seite in einer AngularJS-Direktive zu aktivieren. Ich bewarb mich ng-disabled für alle meine Tasten WÄHREND Last, und ich möchte bestimmte NACH Last deaktiviert Tasten halten.Schaltfläche aktivieren nach dem Laden der Seite in AngularJS Direktive
Ich brauche Richtung/Beratung:
- die DOM-Manipulation: von ng-disabled = bis ng-disabled = "newAnimal.isDisabled"
I "newAnimal.isDisabled!" schätze die Hilfe. Vielen Dank.
HTML:
<a href="#/{{animal.id}}">
<button class="btn btn-success" ng-disabled="!newAnimal.isDisabled" id="add-animal" loading-animals>
Add Animal
</button>
</a>
FACTORY:
var animalFactory = angular.module('app.myFactory',[])
animalFactory.factory('newAnimal',function(){
var newAnimal = function(){
this.animal = "";
this.totalAnimals = 0;
this.totalAdopted = 0;
this.isDisabled = false;
};
return newAnimal
});
REGLER (Modal):
.controller('InformationCtrl', function($scope, $modalInstance, $http) {
$scope.ok = function(){
//check if button successfully clicked
$modalInstance.dismiss('success');
//the code below was from a directive ('LoadingAnimals') that I was working on
//check if all data has been loaded from backend
var loadingPage = function(){
return $http.pendingRequests.length > 0;
//when all objects are loaded, manipulate DOM
//make ng-disabled = "!isDisabled" to "isDisabled"
element.attr("!newAnimal.isDisabled", "newAnimal.isDisabled);
}
loadingPage();
}
RICHTLINIE:
app.directive('loadingAnimals', ['$http', function($http) {
return {
restrict: 'A',
link: function (scope, element, attrs) {
var addButton = attrs.ngDisabled;
//console.log(element.attr('ng-disabled'));
scope.pageLoad = function() {
return $http.pendingRequests.length > 0;
};
scope.$watch(scope.pageLoad(), function (value) {
if (value) {
element.attr("ng-disabled", "newAnimal.isDisabled");
}
else {
element.removeAttr("ng-disabled");
}
})
}
}
}]);
UPDATE:
ich meine Richtlinie aktualisiert und es funktioniert, nicht der beste Weg, um die Ergebnisse zu erreichen, aber es ist eine Möglichkeit.
(Ich hätte nicht die Taste 3 Sekunden lang zu deaktivieren, sondern auf die $ HTTP-Anfrage zu hören, aber da es eine Abhilfe ist, werde ich nicht beschweren)
Danke für alle Antworten. Ich werde in Zukunft aktualisieren, wenn ich einen effizienteren Weg finde.
RICHTLINIE:
.directive('loadingAnimals', function() {
return {
restrict: 'A',
link: function (scope, element) {
var disableLink = (function() {
element.removeClass('disabled');
});
setTimeout(disableLink, 3000);
}
}
}
]);
ich das morgen testen aussehen wird Post-Seite zu machen. Ich sehe, dass Sie anstelle einer Direktive einen Controller verwenden. Ist es in meiner Situation besser/empfohlen, Controller zu verwenden oder ist dies nur ein Ansatz? Aus Neugier, was bedeutet die Variable 'vm'? Danke für Ihre Hilfe. – fragilewindows
Nun, ich denke, die Verwendung von 'angular.element (document) .ready()' kann in Ihrem Fall funktionieren. 'vm' ist die Referenz von' this'. Es ist eine gute Übung .. Sie können mehr unter [** John Papas Style Guide **] lesen (https://github.com/johnpapa/angular-styleguide/blob/master/a1/README.md). – developer033
Während Ihr Code dem ähnlich ist, was ich versuche zu tun, merke ich, dass ich es nicht implementieren kann, weil ich ein Popup-Modal vor dieser Tabelle habe, wo ein Benutzer zuerst auf OK klicken muss, bevor die Daten gefüllt werden. Ich werde meine Frage aktualisieren, um das zu beachten. – fragilewindows