2014-09-01 2 views
1

내 HTML이지시문에서 매개 변수를 컨트롤러로 전달하려면 어떻게합니까?

<td currency-convert idrVal="{{(btcAsk.btcValue * btcAsk.btcAmnt).toFixed(2)}}"></td> 

AngularJS와 코드

컨트롤러처럼 보이는 방법이있다 ..

$scope.convertIDRtoUSD = function(idrValue) { 

    return CurrencyConversions.convertToUSD(idrValue, 'IDR'); 
}; 

을 그리고 지시어처럼 보이는

bitcoinApp.directive("currencyConvert", function() { 
return { 
    restrict: 'A', 
    scope: { 
     idrval: '@' 
    }, 
    template: '<span class="has-tip" tooltip="convertIDRtoUSD({{idrval}})" tooltip-animation="false">{{idrval}}</span>' 
}; 
}); 

이것은 curren입니다. convertIDRtoUSD 메소드를 호출하지 않아야합니다.

온라인으로 읽을 때, 나는 "Isolation Scope"& "을 사용하기로되어 있지만 지금까지는 성공하지 못했다고 생각합니다.

답변

1

좋아, 내가 할 수있는 한 최선을 다해 보겠다. 템플릿에 메소드가 포함되어 있습니다. 런타임에는이 메서드가 현재 범위에 있어야합니다. 그러나이 시점에서 범위는 지시문을 사용하여 만든 격리 된 범위이며 idrval 값만 포함하므로 메서드가 정의되지 않습니다.

은 당신이 중 하나이 idrval와 함께 당신의 지시에 기능 를 지침의 범위에 함수 convertIDRtoUSD()를 추가하거나 통과 해야합니다. 당신이 전자를 선택하면, you'r 지시어는 다음과 같습니다 당신이 기능을 전달하려는 경우

bitcoinApp.directive("currencyConvert", function() { 
return { 
    restrict: 'A', 
    scope: { 
     idrval: '@' 
    }, 
    template: '<span class="has-tip" tooltip="convertIDRtoUSD({{idrval}})" tooltip-animation="false">{{idrval}}</span>', 
    link: function(scope) { 
     scope.convertIDRtoUSD = function(idrValue) { 
      return CurrencyConversions.convertToUSD(idrValue, 'IDR'); 
     }; 
    } 
}; 
}); 

을하고, 기능은 컨트롤러에있는 당신의 HTML은 다음과 같이 보일 것입니다 :

<td currency-convert my-func="convertIDRtoUSD(val)" idrVal="{{(btcAsk.btcValue * btcAsk.btcAmnt).toFixed(2)}}"></td> 

그리고 당신의 지침 :

bitcoinApp.directive("currencyConvert", function() { 
return { 
    restrict: 'A', 
    scope: { 
     idrval: '@', 
     myFunc: '&' 
    }, 
    template: '<span class="has-tip" tooltip="myFunc({val: idrval})" tooltip-animation="false">{{idrval}}</span>' 
}; 
}); 

주의해야 할 몇 가지 것들 - 함수의 속성 이름이 기능하지 낙타의 경우 이름이 '라는 이름 대시', 그리고 매개 변수는에 전달해야한다은 지시어는 명명 된 값을 가진 객체를 전달해야합니다. 희망이 도움이됩니다!

+0

이 지시어의 범위에 함수를 추가했습니다. 이 함수는 비록 리터럴 텍스트로만 표시되지만 호출되는 것처럼 보이지 않습니다. [jsfiddle example] (http://jsfiddle.net/kmbzu2eu/2/) – magician11

+1

[귀하의 바이올린을 업데이트하여 작동합니다.] (http://jsfiddle.net/kmbzu2eu/5/). 문제는 잘못된 위치에 중괄호를 사용했다는 것입니다. 툴팁이 평가 된 표현식의 결과가되기를 원합니다. {{convertIDRtoUSD (idrval)}} _. 어쨌든 {{idrval}}이 (가) 필요하기 때문에 숫자가 필요하지 않습니다. –

+0

좋아요! 고맙습니다! – magician11

관련 문제