3

저는 Angular에 조금 익숙하며 지시어와 관련하여 Angular를 올바른 방법으로 활용하는 방법에 대한 연구를하고 있습니다.각도 : 지시어에 매개 변수를 전송하는 올바른 방법

내 경우에는 Angular & ThreeJS라는 3D 프로젝트 뷰어를 개발하고 있습니다. 사용자는 그가 볼 수있는 다른 "프로젝트"를 가질 수 있습니다.

우리가 프로젝트 ID를 활용하는 방식은 URL 매개 변수를 통해 이루어 지므로 특정 프로젝트를 다른 사람들과 연결하여 볼 수 있습니다.

우리가

... 
    <viewer></viewer> 
... 

을 다음과 같이 뷰어를 정의 할 수 있도록 내가 그것을 이해로서 뷰어/렌더러는, 지시어로 정의되면, viewer-에 URL 매개 변수를 제공하는 몇 가지 다른 방법이 있습니다 지시문 및 URL에서 매개 변수에 액세스하려면 $ stateParams 활용할 노력하고있어. 하지만 계속 작업하면서 $ stateParams에 액세스하는 "명확한"방법은 없지만 컨트롤러를 지시문에 연결 한 다음 컨트롤러에서 액세스해야합니다.

이렇게하는 것이 의도입니까? 아니면 뷰어 지시어의 속성으로 정의해야합니까? 그렇다면 어떻게 html 코드의 url 매개 변수에 액세스합니까? 아니면 세 번째와 더 나은 옵션이 있습니까?

당신이 아마 이해할 수 있듯이, 저는 각도가 약간 새로운데, 주로 Angular의 의도 된 사용법을 파악하기를 원하기 때문에 처음에는 많이 망가지지 않습니다.

안부 인사, David.

답변

2

당신이 문자열을 전달 될 것이다 당신은 당신의 url parameters via scope에 액세스 할 수 있습니다 그래서 @ 여기에 더 의미 :

당신의 지시에
scope: { 
    datasource: '@' 
} 

이 같은 값을 전달할 수 있습니다 :

<viewer datasource={{urlParamValue}}></viewer> 

을 그리고 controller에서 다음과 같이 URL 매개 변수를 수집 할 수 있습니다.

function Controller($scope, $location){ 
    var urlParamValue = $location.search().urlParamValue;  
} 
+0

답변은 범위 선언과 별개입니다. 먼저, 필드의 이름을 바꾸고 싶지 않으면'@'뒤에 이름이 필요 없습니다. 'datasource : '@ datasource ''는 중복되어'datasource :'@ '와 같습니다. 둘째, 단방향'<'또는 양방향'= '바인딩이 필요하거나 템플릿의 중괄호 안에'urlParamValue'를 래핑해야합니다. 그렇지 않으면 지시문의 실제 url 매개 변수 대신 문자열'urlParamValue'가됩니다. – PerfectPixel

+0

@PerfectPixel : 아 .. 고마워. .. 변했어. 나는 여기에 양방향 데이터 바인딩이 필요하다고 생각하지 않는다 ... URL 매개 변수 값과 그 대부분이 문자열이 될 것입니다. – Thalaivar

+1

고마워요. 나는 여기서 언급 한 것을 활용할 수있었습니다. 배후에는 좋은 설계가 될 수 있지만, 서비스와 컨트롤러에 많은 멋진 매개 변수를 주입 할 수 있다는 것을 배웠다면 같은 것을 지령에 적용하지 않으면 약간의 좌절감을 느낄 수 있습니다. –

1

다음과 같이 양방향 바인딩을 사용할 수 있습니다.

scope: { 
    datasource: '=datasource' 
} 
관련 문제