2016-04-08 24 views
0

$ Olayları tetikleyebilen özel bir javascript nesnesine sahibim. Olay işleyicisindeki açısal $ kapsamına erişmek istiyorum, ancak angular.element (...). Scope() işlevini kullanmanın bir şey olmadığını, çünkü yalnızca sınama amaçlı olduğu için okudum.

Diğer düşüncem denetleyicideki nesnemin üzerindeki tanıtıcıyı kaydetmekti, ancak bu çalışmıyor ($ scope.somevalue ayarlanmış gibi görünüyor, ama $ kapsamının aynı nesne olduğunu düşünmüyorum).

Benzer sorular için Yığın Taşması konusunda birçok yanıt buldum, ancak hepsi yönergeleri kullanıyor gibi görünüyor. Tek istediğim, güncellendiğinde nesneden bir değer elde etmek ve görüntülemek.

İşte denediğim iki yol var.

var myObj = GetMyObjInstance(); 

// Working, but apparently it's not good practise to call .scope() on an element. 
myObj.onUpdated = function(){ 
    console.log("myObj updated"); 
    var v = myObj.getValue(); 
    var controllerDiv = document.getElementById("controller"); 
    var $scope = angular.element(controllerDiv).scope(); 

    $scope.apply(function(){ 
     $scope.someValue = v; 
    }); 
} 

// Tried to do this, thinking i would get closure on the scope. 
angular.module('myApp', []).controller('controller', function($scope){ 
    myObj.onUpdated = function(){ 
     console.log("myObj updated"); // Gets logged to console... 
     var v = myObj.getValue(); 
     $scope.somevalue = v; // ... but somevalue does not get displayed. 
     $scope.apply(); // Error, says it's not a function, so maybe this is not the right object?. 
    } 
}); 
+0

'$ scope.apply()' yerine '$ scope. Yine de, direktifleri ve/veya bileşenleri kullanmaya çalışmalısınız. –

+0

$ scope. $ Watch() 'ı denediniz mi? – nihulus

+0

lütfen console.log (v) 'ye bakın ve kontrol edin. Tamamsa, sadece $ scope.apply(); 'ile $ kapsamını değiştirin. $ Apply();' –

cevap

1

Olayları işlemek ve kapsamı güncellemek için AngularJS yönergelerini kullanın.

app.directive("xdEvent", function() { 
    return linkFn(scope, elem, attrs) { 
     elem.on("event", function(e) { 
      scope.$eval(attrs.xdEvent, {$event: e}); 
      scope.$apply(); 
     }); 
    }; 
}; 

Bir denetleyici yerine Hizmeti kullanarak düşünüyorum

<div xd-event="fn($event)"></div> 
0

KULLANIM daha iyi bir uygulamadır. zaman kendisini güncellemek için denetleyici anlatmak için size denetleyicisinden bu değişkenlere erişmek için hala önemli ise Call angularjs service from simple js code

, size $ kullanmak izleyebilirsiniz: bu seride anlatılan gibi Sen enjektör ile dış javascript Bir servisini arayabilirsiniz Servis değişkenleri değişir.

Bu yardımın umarım.

A +

İlgili konular