【发布时间】: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