2014-09-15 2 views
0

사용자 지정 지시문이 있습니다. 링크 함수의 속성은 attributes.user 값을 얻으려고합니다.각도 지시문 - 비동기 attr 보간

<div my-directive user="{{user.name}}"></div> 

이제 사용자가 나는 $를 사용하여 특정 URL에 대한 요청을 한 후 JSON 응답에서 다시 받고 있어요 모델 객체는 다음과 같습니다 내보기 페이지에서이 사용자 정의 지시어는 다음과 같은 방식으로 사용되는 http 서비스. 그러나 내 코드에서 'debugger'를 삽입하여 attribute.user 값을 내 지시문에서 확인하면 attribute.user에 대해 공란이 생깁니다. user.name을 "hello"와 같은 것으로 설정하면 실제로 "hello"가 반환됩니다. 나는 또한 시도했다 :

attributes.$observe('user', function(val){...}) 

그러나 아무 소용 없다. 이것은 비동기 요청을하고 있기 때문에 비어있는 이유입니다. 무슨 일이 벌어지고 있으며 어떻게 해결할 수 있습니까? 감사!

편집 : 여기 내 지시 코드의 단편이다

angular.module('myApp').directive('myDirective', function() { 
    return { 
    restrict: 'A', 
    scope: true, 
    link: function($scope, elem, attr) { 
     $scope.user = $.parseJSON(attr.user) 
    }, 
    controller: ['$scope', '$rootScope', 'GlobalVariables', function($scope, $rootScope, GlobalVariables) { 

    $rootScope.hasSignedUp = GlobalVariables.hasSignedUp; 
    $rootScope.signUpId = GlobalVariables.signUpId; 

    $rootScope.$watch('hasVoted', function(newVal, oldVal) { 
     if(newVal === true) { 
     if($rootScope.signUpId == $scope.user.id){ 
      $scope.text = 'Signed Up!'; 
     }else{ 
      $scope.text = 'Sign Up'; 
     } 
     }else{ 
     $scope.text = 'Sign Up'; 
     } 
    }); 
    }] 
    }; 
}); 

답변

0

편집 : 당신은 당신의 고립 범위와 지침에서 두 유의하시기 바랍니다

angular.module('myApp').directive('myDirective', function() { 
    return { 
     restrict: 'A', 
     scope: { 
      user:'=user' 
     }, 
     link: function (scope, elem, attr) { 

      //use link to subscribe and handle internal logic 

      //Do something with the scope.user here 

      console.log(scope.user); 


     }, 
     controller: ['$scope', '$rootScope', 'GlobalVariables', function ($scope, $rootScope, GlobalVariables) { 

      //use this to export your directive functionality 


     }] 
    }; 
}); 

아래와 같은 바인딩을 정의 할 수 있습니다 그 링크 함수는 지시문 내부 논리를 처리하는 데 사용되며 컨트롤러 함수는 d를 내보내는 데 사용됩니다 방향성 기능.

자세한 내용은 scope 부울하지만 당신이 기대하는 속성의 키가있는 사전이 변경 안, https://docs.angularjs.org/guide/directive

+0

하지만 그건 단지 "user.name"사용자 이름 대신 값으로 줄 것입니다. 또한, 나는 반드시 사용자의 이름을 얻으려는 것이 아닙니다. 사용자 속성 값으로 전달 된 사용자 객체를 원하면 어떻게해야합니까? – user1848902

+0

정상적으로 데이터를 바인드하면 지침 범위와 바인딩 작업의 소스 코드도 게시 할 수 있습니까? –

1

먼저 여기에서 확인할 수 있습니다 귀하의 scope에 : 또한,

scope: { 
    user: '=', 
} 

디렉토리는 범위 값이 변수이고 각도 핸들 바를 포함하지 않을 것으로 기대합니다. 올바른 방법은 다음과 같습니다.

<div my-directive user="user"></div> 

이제이 작업을 수행 할 수 있습니다. 자세한 내용은 AngularJS's documentation을 참조하십시오.

+0

그냥 사용자 속성을 그대로 "사용자"로 설정합니다. 사용자 객체 자체를 전달하려고합니다. – user1848902

+0

아니요, 그렇지 않습니다. 그것은 전체 객체를 my 지시어로 전달합니다. my-drective의 템플릿에서 {{user}}을 인쇄하면 전체 객체가 해당 범위에 있음을 알 수 있습니다. –

+0

흠 ... 문자열 "user"를 출력하고 있습니다. 이것이 도움이되는지 확신 할 수 없지만 범위를 true로 설정했습니다. 컨트롤러에서 사용자 개체를 가져오고 있습니다. 또한 지시어에 대한 템플릿이 없습니다. 함수를 실행하는 데 사용하는 컨트롤러가 있습니다. – user1848902