0

jQuery 플러그인 select2를 사용하고 있으며 AngularJS에서 select2 함수를 호출하려고합니다. angular-ui/ui-select을 사용할 수 있지만 페이지 디자인에는 jQuery 플러그인 select2가 필요하다는 것을 알고 있습니다.AngularJS에서 jQuery 플러그인 함수를 호출하십시오.

모델의 값을 각도로 변경하고 select2의 값을 변경하고 싶습니다.

나는 각도 지침을 작성하고 내가 선택 2 함수를 호출하기를 원하지만 제대로 구현하는 방법을 모른다 : 수정이 오류 I에 대한

Error: [$rootScope:inprog] $digest already in progress 

:

angular.module("myModule").directive("select2Value", [ 
    function() { 
    return { 
     restrict: 'A', 
     require: 'ngModel', 
     link: function(scope, element, attrs, ngModel) { 
     scope.$watch(function() { 
      element.select2().val(ngModel.$modelValue).change(); 
     }); 
     } 
    }; 
    } 
]); 

나는이 오류가 이 솔루션을 사용하고 있습니다 : https://stackoverflow.com/a/36219812/6746305 :

angular.module("myModule").directive("select2Value", [ 
    "$timeout", function($timeout) { 
    return { 
     restrict: 'A', 
     require: 'ngModel', 
     link: function(scope, element, attrs, ngModel) { 
     var timeout; 
     changeValue(function() { 
      element.select2().val(ngModel.$modelValue).change(); 
     }); 
     timeout = void 0; 
     scope.$watch(function() {}, function(newVal, oldVal) { 
      if (timeout) { 
      $timeout.cancel(timeout); 
      } 
      timeout = $timeout(changeValue, 1000); 
     }); 
     } 
    }; 
    } 
]); 

하지만이 기능이 작동하지 않습니다. 모델 각도에서 값을 변경하지만이 값은 select2에서 변경되지 않습니다.

+0

당신은 $ 시계를 필요로하지 않습니다

angular.module("myModule").directive("select2Value", [ "$timeout", function($timeout) { return { restrict: 'A', priority: 0, link: function(scope, element, attr, ngModel) { return scope.$watch(attr.ngModel, function(value) { return $timeout(function() { return element.val(value).change(); }); }); } }; } ]); 

솔루션 여기에서 찾을 수 있습니다 (당신이 블로그 감사합니다). 대신 ngModelController ('require : 'ngModel '')로 제대로 작업해야합니다. 또한 범위를 분리하고 추가 바인딩 (구성, 매개 변수 등)을 전달하는 것이 좋습니다. 그러나 이것은 논평을위한 거대한 주제입니다. – dfsq

답변

관련 문제