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