我知道这样做是有违背Angularjs规定的写法的。
先说说场景吧。
用户在A页面点击“新增”按钮,window.open出一个B页面,在B页面填完信息后,点击保存,想要回显到A页面。然后连同A页面一些信息进行提交到controller.
因为刚接触Angularjs,所以还是以页面B opener.document.getElementById 设置父页面(A页面隐藏的input值)。
但是却出现页面上input view是改变了,但是实际的model根本没有变化,controller中取到的值都是 undefined ;
想请教下
1.如果这样的写法,应该怎么操作才能使得controller中可以取到隐藏的B页面回传的input的值。
2.如果遵循Angularjs写法,应该怎么变化?
附A页面:
<a href="javascript:void(0);" ng-click="add()" >新增</a>
<input id = "abv" ng-model="abv" class="intxt" type="text">
<a href="javascript:void(0);" ng-click="save()" id = "save">保存</a>
A.js:
$scope.add = function(){
var openCustomer = window.open('B.html');
};
$scope.save = function(){
console.log('save ' + $scope.abv);
};
页面B:
this.opener.document.getElementById("abv").value = document.getElementById("a").value;
this.opener.document.getElementById("save").click();
Il vous suffit de modifier l'entrée puis d'ajouter un événement à l'aide de JQ
$("#cert_valid_from").val(date1).trigger('change');
Déclencher principalement la simulation déclenche un événement de changement
Code de référence
A.js :
Page B
Désormais, l'alerte dont vous avez besoin est disponible dans A.js
$scope.abv
.Mais il convient tout de même de noter que cette approche est totalement une solution de contournement et est fortement déconseillée
La raison est que je prévois d'utiliser un plug-in Chrome pour créer un plug-in qui m'aide automatiquement à cliquer sur les boutons et à saisir des éléments. Cependant, le projet est réalisé avec angulaire. Définir la valeur d'entrée avec js n'est pas suffisant. .Je dois mettre à jour la valeur du modèle, ce qui est une perte de temps. Il a fallu beaucoup d'efforts pour découvrir que l'entrée devait être déclenchée au lieu d'un changement, puis il a fallu beaucoup d'efforts pour résoudre le problème du cross-frame. opérations. . . .
Merde, il m'a fallu beaucoup de temps pour trouver la réponse. J'ai vraiment travaillé dur pour trouver la réponse.
Enfin, je l'ai compris : après que js ait modifié la valeur d'entrée, un événement doit se produire. être déclenché au début. Je pensais que c'était un changement, mais après beaucoup de travail acharné, j'ai finalement découvert que c'était une entrée $('input').val(123).trigger('input') était ok.
Cependant, mon projet est plus compliqué. a.html fait référence à b.html via iframe. Les deux HTML ont un ensemble de jquery et d'angular, donc le jquery de b.html doit être utilisé pour déclencher l'entrée (cela peut être le cas). un bug), c'est-à-dire window.frames["f1"].contentWindow .$('input').val('55555555555').trigger('input') au lieu de
$('input',window .frames["f1"].contentWindow.document).val('55555555555 ').trigger('input')
La valeur ngModel n'est pas mise à jour/affichée
Référence http://www.cnblogs.com/whitewolf/p/ngmodel-zhi-bu-geng-xin-slash-xian-shi.html
Raisons
1. La valeur du modèle ne répond pas aux conditions de validation du formulaire, donc angulaire ne la rendra pas
2 En raison du mécanisme spécial d'héritage de chaîne de prototypes de JavaScript, l'attribution des attributs dans $scope ne peut pas être mise à jour. à la portée parent$
Solution rapide pour la raison 2 : ajoutez "." à la valeur d'attribut de ngModel, puis la récupération de la chaîne du prototype JavaScript sera lancée.