$我有一个自定义的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);
}
});
答案 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 +