【问题标题】:Getting access to angular $scope from own event从自己的事件中访问角度 $scope
【发布时间】:2016-07-29 16:56:39
【问题描述】:

$我有一个自定义的 javascript 对象,可以触发事件。 我想访问事件处理程序中的角度 $scope,但我在某处读到使用 angular.element(...).scope() 不好,因为它仅用于测试。

我的另一个想法是在控制器内注册我的对象的句柄,但这不起作用(看起来 $scope.somevalue 已设置,但我不认为 $scope 是同一个对象)。

我在 Stack Overflow 上找到了很多类似问题的答案,但它们似乎都在使用指令。我想要的只是在对象更新时从对象中获取一个值并显示它。

这是我尝试过的两种方法。

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?.
   } 
});

【问题讨论】:

  • 尝试$scope.$apply() 而不是$scope.apply()。但是,您应该尝试使用指令和/或组件。
  • 你试过$scope.$watch()吗?
  • 请 console.log(v) 并检查它。如果可以,只需将$scope.apply(); 更改为$scope.$apply();

标签: javascript angularjs angularjs-scope


【解决方案1】:

我认为使用服务而不是控制器是一种更好的做法。您可以使用注入器从外部 javascript 调用服务,如该线程中所述: Call angularjs service from simple js code

如果从控制器访问这些变量对您来说仍然很重要,您可以使用 $watch 告诉您的控制器在服务变量发生变化时进行自我更新。

希望对您有所帮助。

A+

【讨论】:

    【解决方案2】:

    使用 AngularJS 指令来处理事件和更新范围。

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

    用法

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-02
      • 2017-11-29
      • 2013-03-17
      • 2015-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多