2016-09-27 6 views
0

In meiner eckigen js-App habe ich festgestellt, dass das DOM jedes Mal aktualisiert wird, wenn ich eine Funktion aufruft. Dies geschieht auch dann, wenn die Funktion keine $ scope-Variable geändert hat.

Ich verwende eine ng-Wiederholung, um eine Reihe von Kontrollkästchen wie unten dargestellt zu erstellen.

HTML

<a ng-click="someFunction()" >Some Function</a> 
<form action="/settings/save"> 
    <label> 
    <input ng-repeat="option in settings.active" name="options[]" value="{{option}}" checked="checked" /> 
    {{option}} 
    </label> 
    <input type="submit" value="Save" /> 
</form> 

JS

angular.module("myapp") 
    .controller("settingsCtrl", function($scope, $loadServ){ 

    //$loadServ is a service for fetching data from the server 
    $loadServ("/settings/load") 
     .success(function(response){$scope.settings = response.data}); 

    $scope.someVariable = "something"; 
    $scope.someFunction = function(){ 
     //There's nothing here yet 
    } 
    //More code follows 
}) 

Ich bemerkte, dass die alle deaktiviert Kontrollkästchen aktiviert werden, wenn die "Some Funktion" Schaltfläche geklickt wird. Ich habe das DOM inspiziert und festgestellt, dass alle Kontrollkästchen beim Klicken auf die Schaltfläche erneut gerendert wurden.

Gibt es eine Möglichkeit, das DOM nur zu aktualisieren, wenn sich der $ scope ändert? Hinweis: Ich kann keine einseitige Bindung verwenden, da $ scope.settings.active durch eine andere Funktion geändert werden kann.

+0

angewendet wurde Sie möchten, dass etwas passiert, nur wenn Sie auf eine Schaltfläche klicken, die Ihre someFunction aufruft? –

+0

können Sie einen Plunker oder Jsbin mit Ihrem Test erstellen? Es erscheint wie ein Stück von DOM, das nicht von angular gesteuert wird (ohne ng-app oder ohne ng-Controller, an einem bestimmten Punkt) –

+0

Ich möchte nicht, dass mein DOM erneut gerendert wird, wenn ich someFunction aufruft. Dies liegt daran, dass someFunction den $ scope nicht ändert. Und ich möchte nicht die Checkbox Anpassungen verlieren, nur weil einige andere nicht verwandte Funktion hieß – elSama

Antwort

0

Ich habe die Quelle des Fehlers gefunden. Es wurde durch einen Filter verursacht, der weit über den Knoten

Verwandte Themen