최소한의 제어 권한을 가진 제 3 자 jQuery 응용 프로그램이 있습니다. 다른 것을 사용하고 싶지 않으므로 사용하지 않으려 고하지 마십시오. 이렇게 ...이 응용 프로그램은 <select>
(내가 제어 할 수있는) 빈 값으로 변경하고 내 AngularJS ngModel이 jQuery가 그 선택을 다른 값으로 변경했다는 사실을 알고 싶습니다.
eval()
을 사용하는 것 이외에는 작동하지 않는 것처럼 보일 수 있습니다. 그래서 나는 모든 종류의 다른 솔루션을 시도했지만 심각하게 사용하지 않으려 고하지만 아무 것도 작동하지 않습니다. (내가 말했듯이 eval()
은 별개입니다.) 내 솔루션은 실제로 ngModel이 단순한 이름 (이름) 일 경우 실제로 작동하지만 사실 복잡한 이름 (object.name)이므로 이것이 막혔습니다. 내가 jQuery를이 변화를 한 것으로 각도 조언을 할 수있는 방법이있다, 다음과 같은 <select ng-model="user.language">...</select>
처럼 우리의 모난 모습을 알고 코드에서 그래서 업데이트 Select의 Angular ngModel이 jQuery로 변경되었습니다
var optionObj = $('#selectId').val('');
angular.element(optionObj).triggerHandler('change'); // this fail
angular.element(optionObj).triggerHandler('onchange'); // this doesn't do anything
var scope = angular.element(optionObj).scope();
scope.$evalAsync(function(optionObj) {
var ngModelAttr = optionObj.attr("ng-model"); // get the ng-model attribute
scope[ngModelAttr] = ''; // this does not work with complex object
scope.user.language = ''; // this work, but cannot use it since ngModel naming is dynamic and unknown from within the code
console.debug(scope.user.language); // not empty 1st attempt, but empty on 2nd solution but is non-dynamic
// using eval() works but it's dangerous
eval("scope."+ngModelAttr+"=''");
}(optionObj));
? 다시 여기에
user.language
이라는 사실을 알고 있다는 사실을 잊지 마라.하지만 jQuery 애플리케이션 안에서는 그것을 모르기 때문에 모든 것이 동적으로 작동해야한다.
내가
eval
를 사용하는 경우는 다음 작동하지만, 그것은 또한
가치 내가
AngularJS 1.3
를 사용하고 있음을 알고 ... 추악한뿐만 아니라 위험뿐만 아니라 그리고 내가 대신
$evalAsync()
를 사용하는 이유는 이유
$apply()
달콤한 일을하는 것도, 어쨌든 값을 살균합니까? 'eval()'이 사용하기에 안전하지 않다는 것을 알기 때문에 ... – ghiscoding
예! 이 문자열은 안전하지 않은 코드의 실행을 방지하는 몇 가지 제한이있는 Angular 식으로 컴파일됩니다. 표현식 [here] (https://docs.angularjs.org/guide/expression)에 대한 자세한 내용을 보거나'$ eval()'[here] (https://docs.angularjs.org/)에 대한 자세한 정보를 얻을 수 있습니다. api/ng/type/$ rootScope.Scope # $ eval) – lukewestby
와우 감사합니다. 실제로 좋은 해결책입니다. 다른 답변이 나오면 받아 보겠습니다. 그러나 지금까지 답변이 최고입니다. ;) – ghiscoding