Angular $ watch未在弹出窗口修改的字段上触发

时间:2015-06-04 06:16:43

标签: javascript angularjs

我有一个Angular 1.4.x应用程序,它启动一个弹出窗口(用于OAuth的东西)。在某些时候,弹出窗口会将值写入主父窗口/应用程序的输入字段。这个过程很好。我想要的是让应用程序运行一些代码,一旦该字段被更新,但似乎当弹出窗口更新字段时,永远不会触发$ watch函数。如果我只是将光标放在字段中并修改值,那么一切正常。可能是什么问题?

输入字段:

<input type="text" id="url" ng-model="item.url">

控制器监视位:

$scope.$watch('item.url', function(n, o) {
  console.log(n, o);
});

写入父级的弹出代码:

var url = window.opener.document.getElementById("url").focus();
url.value = "hello";

请注意,如果我使用输入字段,我真的不在乎 - 我对其他方法持开放态度。我只需要以一种简单的方式将值传递回角度应用程序(即一些没有任何库的基本跨浏览器代码)并让它从那里开始 - 这似乎是最直接的方式。

1 个答案:

答案 0 :(得分:1)

试试这段代码:

var opener = window.opener;

//Replace the 'controller-id' with the id of the controller div
var controllerDiv = opener.document.getElementById('controller-id');
var scope = opener.angular.element(controllerDiv).scope();

scope.title= 'Hello';
 //We update the scope manually, so we have to call this
scope.$digest();