2017-01-10 7 views
0

ich habe die Darstellung von HTML nach AngularJS nennen Ihr Beherrscher istjquery nach dem Rendern AngularJS HTML

App.controller('controller', ['$scope', '$http', '$sce', '$routeParams', '$location', function ($scope, $http, $sce, $routeParams, $location) {  
    $http({ 
     //http call 
    }).then(function (response) { 
     $scope.requestpurpose = $sce.trustAsHtml(response.data.requestpurpose); 

    $scope.$watch('requestpurpose', function(newValue, oldValue) { 
     if(typeof newValue != 'undefined'){ 
     alert(newValue); 
     showAlreadySelected(); 
     } 
    }); 
}]); 

und seine jquery Skript ist

<script type="text/javascript"> 
    // it will show the div depending on purpose of request 
    function showAlreadySelected(){ 
     if ($("#1").is(":checked")) { 
      $("#veterinarian-info").show(); 
     } else { 
      $("#veterinarian-info").hide(); 
     } 
    } 
</script> 

Das ist mein HTML

<div class="row purpose-box" > 
    <div class="col-sm-12" ng-bind-html="requestpurpose"></div> 
</div> 

und nach AJAX-Aufruf unterhalb von HTML ist Renering in ng-bind-html

<div class="boxes-check"> 
    <div class="box-one"> 
     <input checked="checked" rev="Annual exam" type = "checkbox" name = "request_purpose[]" ng-model=formData.request_purpose[1] onChange="angular.element(this).scope().changePurpose(this)" value = "1" class = "md-check" id = "1" > 
    </div> 
    <div class="box-two"> 
     <label title="" for="1"> 
      <span></span> 
      <span class="check"></span> 
      <span class="box"></span> Annual exam 
     </label> 
    </div> 
</div> 
<div class="boxes-check"> 
    <div class="box-one"> 
     <input checked="checked" rev="Spay or neuter surgery" type = "checkbox" name = "request_purpose[]" ng-model=formData.request_purpose[2] onChange="angular.element(this).scope().changePurpose(this)" value = "2" class = "md-check" id = "2" > 
    </div> 
    <div class="box-two"> 
     <label title="" for="2"> 
      <span></span> 
      <span class="check"></span> 
      <span class="box"></span> Spay or neuter surgery 
     </label> 
    </div> 
</div> 

aber ich bin vor Problem ist nach Winkelbelastung seiner Berufung showAlreadySelected Funktion aber nicht ausgewählt „# 1“ und eine Sache, wenn jeder Körper helfen kann jede JQuery-Funktion ist, die mit der ID „#, wenn Eingabeelement getroffen werden 1 "," # 2 "rendern in mein ng-bind-html div.

+0

ID nicht mit einer Zahl beginnen sollte und was ich sehe, ist, dass Sie Ihre '$ gesetzt scope.requestpurpose' an die HTML-Zeichenfolge, aber fügen Sie sie wirklich zur DOM-Struktur hinzu? – ValLeNain

+0

eigentlich mache ich nur einige Änderungen an alten Projekt, das von alten Entwickler gebaut wird, so gibt es einige Fehler Ja, es ist Hinzufügen zu DOM-Baum seine html ist

hu7sy

Antwort

1

Zuerst würde ich den Beobachter außerhalb der then bewegen, weil Sie jedes Mal einen neuen Beobachter registrieren, wenn Sie den Ajax-Anruf tätigen.

Ich habe versucht, es funktioniert, um eine Nummer als ID haben (aber nicht empfohlen, obwohl). Wir brauchen auch Ihren HTML-Code, denn er sollte so funktionieren, wie Sie ihn implementiert haben. Wird der Knoten #1 durch den Ajax-Aufruf hinzugefügt (= vorhanden in $scope.requestpurpose) oder ist er immer im DOM vorhanden?

Auch können Sie eine console.log in der showAlreadySelected Funktion hinzufügen, um sicher zu sein, dass es aufgerufen wird.

EDIT

App.controller('controller', ['$scope', '$http', '$sce', '$routeParams', '$location', function ($scope, $http, $sce, $routeParams, $location) {  
    $http({ 
     //http call 
    }).then(function (response) { 
     $scope.requestpurpose = $sce.trustAsHtml(response.data.requestpurpose); 
     showAlreadySelected(); 
    }); 
}]); 
+0

es wird von Ajax Anruf – hu7sy

+0

warum nicht Entfernen des Watcher und Aufruf der 'showAlreadySelected 'Funktion direkt nach dem Ändern des Wertes von' $ scope.requestpurpose'? – ValLeNain

+0

es ist ein asynchroner Aufruf, so dass es nicht darauf warten wird und es die Funktion showAlreadySelected zuerst – hu7sy

0

Ich habe binden Klasse mit DOMSubtreeModified auf Veränderungen zu erkennen innerhalb eines div

$('.purpose-box').bind("DOMSubtreeModified",function(){ 
     showAlreadySelected(); 
}); 
Verwandte Themen