Angular $watch不会被popup修改过的字段触发

Angular $watch not triggered on field modifed by popup

本文关键字:字段 修改 popup watch Angular      更新时间:2023-09-26

我有一个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);
});

写给parent的弹出代码:

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

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

试试这段代码:

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();