AngularJS stil ng nu schimbă cu proprietatea

voturi
9

I cant par să dau seama de ce stil de proprietate nu este obtinerea actualizat. În cererea mea mai mare pare să funcționeze bine.

angular.module('Model', [])
    .factory('SizeModel', function () {
        return {
            width: 200,
            height: 100,
            display:block,
            getCombined: function() {
                return parseInt(this.width) + parseInt(this.height);
            }
        };
    });

function AlbumCtrl($scope,SizeModel) {
    $scope.master = SizeModel;
    $scope.$watch(master,function(){
    $scope.myprop = { display: $scope.master.display,
                      backgroundColor: #333,
                      width: $scope.master.width+'px',
                      height: $scope.master.height+'px',
                      color: #FFF
                     };
        });

}

function AnoCtrl($scope,SizeModel) {
    $scope.master = SizeModel;

    $scope.toggle = function(){
        $scope.master.display = none;
    }
}

function EditCtrl($scope,SizeModel) {
    $scope.master = SizeModel;
}

http://jsfiddle.net/ganarajpr/C2hRa/4/

Aici este o vioara care prezinta problema cu care se confruntă în prezent am. Veți observa că lățimea și înălțimea sunt obtinerea actualizate în div atunci când schimbați intrarea. Dar stilul in sine doesnt pare să se actualizeze. Oricine poate spune-mi ce fac greșit aici?

Am încercat toate scenariile următoare

  1. folosind domeniul de aplicare $ $ aplică .. -. Aruncări o eroare care să ateste $ aplică deja în curs de desfășurare ..
  2. . $ RootScope aplică $ - aceeași ca mai sus.
  3. Setarea o altă variabilă într-un serviciu care este $ privit în celălalt controler. - nici o schimbare vizibilă.

Ar fi foarte tare dacă cineva mă poate primi un răspuns la acest lucru. De asemenea, ar fi foarte fericit dacă poți să-mi spui de ce anume nu este obtinerea actualizat.

Întrebat 24/05/2012 la 10:52
sursa de către utilizator
În alte limbi...                            


2 răspunsuri

voturi
12

Ai avut atribuit valorile pentru lățime și înălțime la câmpul de stil myprop pe o bază unică. Deci, atunci când modificat lățimea sau înălțimea cu myprop nu se schimba.

Modificați valoarea myprop la o funcție care calculează valoarea sa în schimb ...

http://jsfiddle.net/DyHHJ/

Publicat 24/05/2012 la 11:02
sursa de către utilizator

voturi
1

Dvs. $scope.$watchîn AlbumCtrl numai ceasurile inegalitate de referință , care se determină prin compararea strictă prin intermediul operatorului Javascript! ==. Pentru că se schimbă doar o proprietate asupra obiectului, trimiterea la mastereste încă la fel și nu se declanșează ceas $. Ai nevoie pentru a trece un argument suplimentar pentru a viziona $ pentru a utiliza objectEquality. A se vedea acest plunkr , și aici este codul relevantă de mai jos:

$scope.$watch("master",function() {
  $scope.myprop = {
    display: $scope.master.display,
    backgroundColor: "#333",
    width: $scope.master.width+'px',
    height: $scope.master.height+'px',
    color: "#FFF"
  };
}, true);

Al treilea argument truespune unghiulare pentru a determina inegalitatea de watchExpression de funcția angular.equals. Se determină în mod corect că actualizate masterobiectul a fost schimbat, și actualizărimyprop

Publicat 21/08/2014 la 21:17
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more