내가있어 몇 가지 중첩 된 지침 :중첩 된 지침
이<first-directive>
<second-directive user="user">
<third-directive name="name">
<fourth-directive description="description">
첫 번째 지침의 템플릿이 두 번째 지침을 가지고, 두 번째 지침의 템플릿이 세 번째 지침이있다 등등. 모든 지시문에는 격리 된 범위가 있습니다.
첫 번째 지시어는 user
개체를 자체 범위에 설정합니다. 동기 방식 (예 : $scope.user = {name: "Alice"}
)이면 모든 것이 정상이지만 비동기 방식으로 사용자를로드하면 (예 : $http.get(url).then(function (user) { $scope.user = user }
) 다른 모든 지시문이 작동하지 않습니다. 예를 들어 두 번째 지시문의 제어기 기능 user
가 그 범위에 아직 설정되어 있지 않은 경우, 평가된다.
내가 지금까지 찾은 유일한 해결책은 있기 때문에, 많이 짜증, (두 번째 약속에 대한 예 $scope.$watch("user", function (user) { $scope.name = user.name}
) 모든 중첩 된 약속을 $scope.$watch
을 사용하는 것입니다 내가 이미 <first-directive>
안에 다른 어딘가에서 사용하는 지시문을 사용하려면 $scope.$watch
을 사용하도록 다시 작성해야합니다.
다른 방법으로 해결할 수 있습니까? 첫 번째 지시어에 필요한 데이터를로드 할 수 있습니다. resolve
에 사용 된 라우트의 기능이지만 라우트 나 컨트롤러를 수정하지 않고도이 지시문을 페이지에 넣을 수 있기를 원합니다.
컨트롤러에서 사용자를 가져 오는 대신 경로에서 사용자를 해결하지 않는 이유는 무엇입니까? – cbass
나는 지시선의 컨트롤러가 아닌 지시어의 컨트롤러에서 객체를 가져온다. 모든 페이지에 넣을 수있는 독립적 인 구성 요소를 만들고 자체적으로 필요한 데이터를 가져 오려고합니다. 어디서나 $ scope. $ watch를 추가하지 않고도 작동하도록 할 방법이 없다면, 아마 그 구성 요소가 사용 된 경로에서 데이터를 가져 오게 될 것이지만 가능하다면 그것을 피하고 싶습니다. – szimek