2016-08-07 2 views
3

Habe meine Richtlinie, wie dieAngularJS beobachten können nicht Eingangsbereich ng-Modell ändert

<input type="range" min="10" max="100" ng-model="svgConfig.textConfig.fontSize" /> 

In meinem Controller ich wie

$scope.svgConfig = { 
    text:'', 
    textConfig: { 
     fontSize: 20 
    }, 
    rectConfig: [] 
}; 

Der Versuch, Änderungen Objekt bekam erkennen hier, um in Verbindung zu fangen Richtlinie, aber nichts passiert.

var setDomBindings = function($scope, $element, $attrs){ 

    $scope.$watch('svgConfig.textConfig.fontSize', function() { 
     var domText = $element.find('text'), 
      textExample = domText.last()[0], 
      dataText = $scope.svgConfig.text; 

     debugger; //haven't even been reached! 

     if($.isEmptyObject(textExample) && domText.length === 0 && dataText === 0){ 
      $scope.clearSvgRectConfig(); 
      return; 
     } 

     $scope.setSvgRectConfig(textExample, domText.length); 
    }); 
}; 

/* 
* Retruns initialized DOM element 
*/ 
return { 
    restrict: 'E', 
    templateUrl: './app/shared/imageTextEditor/imageTxtSvgView.html', 
    controller: 'imageTxtSvgController', 
    transclude: true, 
    link: setDomBindings 
}; 
+0

Ihre Bindung ist auf 'svgConfig.textConfig.fontSize' aber Ihre Uhr ist auf' svgConfig.fontSize'. Ist das ein Tippfehler oder eine schlechte Übersetzung Ihres Codes in den Fragenkörper? – Claies

+0

@Claies typo, sorry – DanilGholtsman

+0

ok, jetzt, da das aufgeklärt ist, hat deine '$ watch' eine seltsame syntax, und du scheinst' $ element' zu verwenden, was keine angular aware Funktion ist. – Claies

Antwort

1

Beachten Sie, dass diese Funktion keine Elemente nach Tagname/CSS-Selektor findet. Für Nachschlagevorgänge nach Tag-Namen versuchen Sie stattdessen angle.element (Dokument) .find (...) oder $ document.find() oder verwenden Sie die Standard-DOM-APIs, z. document.querySelectorAll() Sie haben Zugriff auf die Implementierungen children(), contents() und data(), sodass Sie normalerweise einen Weg finden können.

+0

gut, yep, könnte ich mach es wie durch Element-Events, aber, ahh ... mag es nicht, Dinge mit DOM zu tun. vielleicht vermisse ich etwas, es gibt eine Menge anderen Code auch dort, die Änderungen an Geltungsbereich – DanilGholtsman

+0

anwenden, wenn Sie jquery mit eckigen hinzufügen, dann können Sie diese Funktion verwenden. –

+0

habe es schon da. Ich schätze, ich werde deinen Beitrag als Antwort machen, wenn nichts neues interessantes hier sein wird:) – DanilGholtsman

Verwandte Themen