angular.js - jQuery设置input value Angularjs controller 无法获取
習慣沉默
習慣沉默 2017-05-15 16:49:38
0
4
731

我知道这样做是有违背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();
習慣沉默
習慣沉默

répondre à tous(4)
过去多啦不再A梦

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 :

$scope.add = function() {
        var openCustomer = window.open('B.html');

};

// 这里不用$scope而用window是为了在B页面调用
window.save = function(value) {
    $scope.abv = value;

    alert($scope.abv);
};

Page B

//这里直接调用刚才A.js声明的save方法,然后把B页面的值传进去
opener.save(document.getElementById('a').value);
window.close();

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.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal