2013-05-16 6 views
0

안녕하세요, 유효성 검사 지시문을 만들고 싶습니다. 기본적으로 서버에서 원격 유효성 검사를 호출합니다. 나는이 같은 기대 :각도 js 지시문에서 응용 프로그램 컨트롤러 메서드를 호출하는 방법

<input type="text" id="nome" required ng-model="client.context" available="checkAvailableContexts"> 

을하고이 같은 내 ClientController의 메소드를 호출해야합니다 :

$scope.checkAvailableContexts = function(contexto, callbacks) { 
    service.checkContextAvailability(contexto, callbacks); 
} 

을이 내 서비스 방법 :

this.checkContextAvailability = function(context, externalCallbacks) { 
var url = angular.url("/clients/context/" + context + "/available"), 
    callback = { 
     success: function(){}, 
     error: function(){} 
    }; 

$.extend(callback, externalCallbacks) 
$.ajax({ 
    url: url, 
    data: { context: context }, 
    success: function(data){ 
     $timeout(function(){ 
      callback.success(data); 
     },100); 
    }, 
    type: "GET", 
    dataType: "json", 
    contentType: "application/json;charset=UTF-8onte" 
}); 
}; 

내 지시가 다음과 같이됩니다.

.directive('available', function(){ 
    return { 
     restrict: "A", 
     require: "ngModel", 
     replace: true, 
     link: function(scope, element, attrs, controller){ 
      controller.$parsers.unshift(function (viewValue) { 
          //call the ClientsController method passing viewValue 
          //and callbacks that update the validity of the context 
      }) 
     } 
    } 
}) 

그러나 지시문 내부에서 clientController를 호출하는 방법을 알 수 없습니다.

나는 함수의 이름으로 attrs.available을 가지고 있음을 알고있다. 하지만 내 매개 변수를 전달 컨트롤러 범위에서 실행할 수 없습니다;

도움이 될 것입니다.

답변

1

컨트롤을 호출 할 필요가 없습니다. 변수를 변수와 공유하기 만하면됩니다. 당신이 지시어에서

$scope.availableOpts = { 
    check: checkAvailableContexts, 
    context: ...; 
    callbacks: ...; 
} 

: 당신은 같은 공유 바르와 변수를 추가, 당신의 범위에서

<input type="text" id="nome" 
required ng-model="client.context" 
available="availableOpts"> 

:

처럼, 지시어와 객체를 공유 할 수있는 일입니다 당신은 범위에서 그것을 얻습니다 :

.directive('available', function(){ 
return { 
    restrict: "A", 
    require: "ngModel", 
    replace: true, 
    scope: {available: "="} 
    link: function(scope, element, attrs, controller){ 

    // At this point, you have an variable at directive scope, that is shared 
    // with the controller, so you can do: 
    scope.available.check(scope.availabe.context, scope.available.callbacks); 
    // the controler will have now a var $scope.availableOpts.result 
    // with the return of the function tha you call 

    } 
} 
}) 
관련 문제