code

Angular Directive(각도 지시)의 선택적 매개변수

starcafe 2023. 10. 5. 23:26
반응형

Angular Directive(각도 지시)의 선택적 매개변수

나는 Angular에 대해 5개의 파라미터를 받는 지시문을 만들었고 그 중 하나는 옵션 배열입니다.제가 대처하려는 방법은 다음과 같습니다.

app.directive('fooDirective', function() {
    return {
        restrict: 'AE',
        scope: {
            param1: '=',
            param2: '=' // optional array
        },
        template: //...
                "<div ng-class='defineClass()'> Message </div>"
                  //...
        controller: function($scope) {

             if (typeof $scope.param2 === 'undefined')
                  $scope.param2 = [];

             console.log($scope.param2);

             $scope.defineClass = function() {
                  if ($scope.param2.length == 0) return 'gray-text';
                  return 'red-text';
             };

             // ......
         }
    }
});

내 코드의 어느 시점에서 나는 그것을 확인합니다..lengthparam2정의되지 않으면 많은 오류가 발생합니다.나를 미치게 하는 것은console.log()당신은 출력 a를 볼 수 있습니다.[], 을 나타내는..length내 param의 값은 0이어야 하며 콘솔의 오류는 console.log의 출력 뒤에 표시됩니다.

그래서 Angular가 스코프를 묶는 방식이나 명령이 구성되는 흐름에 대해 뭔가를 놓치고 있는 것 같습니다.두 가지 모두에서 내 매개 변수를 확인하려고 시도했습니다.link그리고.compile같은 문제가 발생했습니다.

그래서, 내가 뭘 놓치고 있는 거지?미리 감사드립니다.

각진 설명서(다음 항목 참조)scope이중 direction 결합):

=아니면=attr- 로컬 범위 속성과 특성 특성 값을 통해 정의된 이름의 상위 범위 속성 간에 쌍 direction 바인딩 설정...상위 스코프 속성이 없으면 NON_ASSIGNABLE_MODEL_EXPRESSION 예외가 발생합니다.다음을 사용하여 이 동작을 방지할 수 있습니다.=?아니면=?attr선택사항으로 플래그를 지정합니다.

따라서 매개변수를 선택적으로 만드는 해결책은 결합을 선택적인 양방향 결합으로 변경하는 것입니다.?.

...
scope: {
    param1: '=',
    param2: '=?' // notice the ? makes this parameter optional.
},
...

언급URL : https://stackoverflow.com/questions/31170508/optional-parameter-on-angular-directive

반응형