我知道这样做是有违背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();
过去多啦不再A梦2017-05-15 16:51:38
입력을 수정한 다음 JQ를 사용하여 이벤트를 추가하기만 하면 됩니다
$("#cert_valid_from").val(date1).trigger('change');
주로 트리거 시뮬레이션이 변경 이벤트를 트리거합니다
给我你的怀抱2017-05-15 16:51:38
참조 코드
A.js:
으아아아B페이지
으아아아이제 A.js에서 필요한 것이 무엇인지$scope.abv
알릴 수 있습니다.
그러나 이 접근 방식은 완전히 해결 방법이며 강력히 권장되지 않는다는 점에 유의해야 합니다
漂亮男人2017-05-15 16:51:38
이유는 버튼 클릭이나 입력을 자동으로 도와주는 플러그인을 만들기 위해 크롬 플러그인을 사용하려고 하는데, 프로젝트가 Angular로 만들어졌기 때문에 입력 값을 설정하는 것만으로는 충분하지 않습니다. 모델 값을 업데이트해야 하는데, 이는 많은 비용이 듭니다. 변경이 아닌 입력이 실행되어야 한다는 사실을 파악하는 데 시간이 걸렸고, 그런 다음 프레임 간 작업 문제를 해결하는 데 많은 시간을 보냈습니다. . . .
젠장, 답을 찾는 데 오랜 시간이 걸렸습니다. 답을 찾기 위해 정말 열심히 노력했습니다.
결국 정리하자면, js가 입력 값을 수정한 후에는 이벤트가 실행되어야 합니다. 처음에는 변경이라고 생각했지만 많은 노력 끝에 마침내 입력 $('input').val(123).trigger('input') 이 괜찮다는 것을 알았습니다.
그러나 내 프로젝트는 더 복잡해지면 a.html은 iframe을 통해 참조됩니다. b.html의 html은 모두 jquery와 angle의 집합을 갖고 있으므로 b.html의 jquery를 사용하여 입력(버그일 수 있음), 즉 window를 트리거해야 합니다. .frames["f1"].contentWindow.$('input' ).val('55555555555').trigger('input') 대신
$('input',window.frames["f1"].contentWindow. document).val('55555555555').trigger('입력' )
黄舟2017-05-15 16:51:38
ngModel 값이 업데이트/표시되지 않습니다
참조 http://www.cnblogs.com/whitewolf/p/ngmodel-zhi-bu-geng-xin-slash-xian-shi.html
이유
1. 모델 값이 양식 유효성 검사 조건을 충족하지 않아 각도가 렌더링되지 않습니다
2. JavaScript의 특수 프로토타입 체인 상속 메커니즘으로 인해 $scope의 속성 할당을 상위 $scope
빠른 이유 2: ngModel의 속성 값에 "."를 추가하면 JavaScript 프로토타입 체인 검색이 시작됩니다.