从自己的事件中访问angular $ scope

时间:2016-04-08 12:19:11

标签: javascript angularjs angularjs-scope

$我有一个自定义的javascript对象,可以触发事件。 我想在事件处理程序中访问angular $ scope,但我已经读过使用angular.element(...)的地方。scope()不好,因为它只是用于测试。

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

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

以下是我尝试过的两种方式。

$.ajax({
type: "post",
url: '<?php echo $this->Url->build(array('controller'=>'Villes','action'=>'viewresult')); ?>',
data: {
    departements: dptcode
},
dataType : "json",
success: function (ret) {
           // Update some plots and areas attributes ...
           var updatedOptions = {'plots' : {}};
           // add some new plots ..
           var newPlots = {

               $.each(ret, function(index, element) {
                       "Limoge" : {
                           x : element.x,
                           y : element.y,
                           text : {content : "Limoge"},
                           tooltip : {content : "Limoge"}
                       },
               });



           }

           // and delete some others ...
           var deletedPlots = [];

           $(".mapcontainer").trigger('update', [updatedOptions, newPlots, deletedPlots, {animDuration : 1000}]);




},
error : function(xhr, textStatus, errorThrown) {
    alert('An error occurred! ' + errorThrown);
}
});

2 个答案:

答案 0 :(得分:1)

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

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

USAGE

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

答案 1 :(得分:0)

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

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

希望得到这个帮助。

A +