2013-07-09 2 views
0

컨트롤러의 변수를 지시문에 전달하여 지시문의 템플릿에 넣을 수 있습니다. 이 같은 템플릿AngularJS : 컨트롤러에서 보간 될 지시문에 대한 변수 전달

app.directive('alert', function() { 
return { 
    restrict: "E", 
    replace: true, 
    transclude: true, 
    templateUrl: "partials/templates/alert.html", 
    link: function(scope, element, attrs) { 
     scope.type = attrs.type; 
    } 
}; 
}); 

:

나는 지시문과 같이이

<div class="alert alert-{{type}}"> 
    <strong ng-if="type">{{type | capitalize}}:</strong> <span ng-transclude></span> 
</div> 

다음과 같이 나는 지시어를 사용 :

<alert ng-show="alert.message" type="{{alert.type}}">{{alert.message}}</alert> 

내 Ctrl 키가있다 변수는 다음과 같습니다.

$scope.alert = { 
    type: 'success', 
    message: 'alert message' 
} 

지시문의 scope.type은 템플릿에서 '{{alert.type}}'문자열로 표시되는데, 단순히 문자열 'success'로 표시되기를 바랍니다.

내가 좋아하는 지시어에게 분리 범위를 제공 시도한 다음 있기 때문에

scope: { 
    type: '@' 
} 

하지만 실패 HTML에서 ng-show="alert.message (존재하는 경우에 true를 반환하지 않습니다, 그래서 지시자가 표시되지 않습니다) 지시어가 ctrl의 범위에 액세스하지 못했습니다.

이 변수를 컨트롤러에서 지시문으로 전달하고 보간하는 올바른 방법은 무엇입니까?

+0

이 경우 핸들 {{...}}이 필요합니까? 그것들없이'alert.type'을 전달해보십시오. –

+0

시도하지 않고 그것을 고치지 않았습니다. 내 이해는 지시문에 분리 된 범위와 적절한 값 (=, @ 또는 &)을 지정하지 않으면 지시문이 attrs를 문자열로 처리한다는 것입니다. 그래서'scope.type = attrs.type'는 $ parse로 무언가를하지 않는다면 어떤 평가도하지 않을 것입니다. 따라서 지시어가 가져 오기 전에 {{...}}을 사용하여 평가해야합니다. –

답변

0

거미줄이나 피들이가 도움이되었을 것입니다. 것은 너무 고립 된 범위없이 일해야한다. 지시어 html 태그 외부에서 ng-show를 이동하고 type 속성 use 표현식을 {{}}없이 사용하는 것이 좋습니다. 이 같은 것

<span ng-show="alert.message"> 
<alert type="alert.type">{{alert.message}}</alert> 
</span> 

그런 다음 격리 된 범위 접근 방식을 사용하십시오.

+0

네 말이 맞아,이게 문제없이 작동해야하는 것처럼 보였고 나는 jsfiddle을 만들었다 : http://jsfiddle.net/bfPB5/2/ 처음에는 희망이 있었지만 어떤 것이 작동하는지. 웬일인지 나의 angularjs 프로젝트는 같은 것을하지 않고있다. 내 문제가 어딘가에있는 것 같습니다. –

+0

왜 이런 일을하는지 전혀 모르겠지만, 실제 프로젝트에서 위의'template'와 반대로'templateUrl : 'path/to/template.html'을 사용하고, 실제 프로젝트를'template ''templateUrl'에서 작동했습니다. 왜 이것이 사실일까요? –

관련 문제