문제

나는 아주 특정한 문제점과 지침을 시작으로 특정 문자(t,u,v,w,y,z).지시어에서 사용되는 select 요소 및 보고를 위한 ngOptions 변경합니다.

ngOptions 으로 채워집에서 데이터 Ajax 요청,그리고 지시어 이름을 시작으로 특정 문자,예를 들어,w,두 번째 보 콜백을 발생하기 전에 선택한 옵션에 만들었습니다.면 지시어의 이름으로 시작하는 다른 문자(a,k,m,n)두 번째 시계 콜백을 발생한 후에는 옵션이 생성되었습니다.

샘플은 다음과 같습니다 여러 지시어를 시작으로 다양한 편지입니다.열의를 보려면 콘솔 문제입니다.

<select w-foo ng-model="bar" ng-options="o.name for o in options"></select>
app.controller("test", function ($scope, $timeout) {

    // Emulate ajaxed options
    $timeout(function () {
        $scope.options = [{
            name: "aaa",
            id: 1
        }, {
            name: "bbb",
            id: 2
        }, {
            name: "ccc",
            id: 3
        }];
    }, 500);

});

app.directive("wFoo", function () {
    return {
        require: 'ngModel',
        link: function (scope, element, attrs, ngModel) {
            scope.$watch(attrs.ngOptions.replace(/.*in /, ""), function () {
                console.log("w-foo ngOptions changed", element.html());
            });
        }
    };
});

위 코드에서 element.html() 이 포함됩니다 하나의 빈 option 처음에 시계 콜백(초기 소화)을 포함하고 또한 하나의 빈 option 에서 두 번째 다이제스트(을 때 아약스가 완료되).

어디에이 동작에서 오는가?

도움이 되었습니까?

해결책

많은 노력을 기울이고 있 메커니즘은 여기에는 참여하는 설명이 행동:

  1. 가에서 실행되도 같은 순서 그들이 등록되어 있는지(참조 코드 $watch 방법()).

  2. 포스트 링크 기능을 수행에 역 순서 의 우선 순위(에 대한 설명서를 참조하십시오 priority).

  3. 지시어와 같은 우선 순위에서 실행되는 정의되지 않은 순서입니다.기본 우선 순위는 0, 그래서 모든 사용자 지정 지시어를 여기에는 이 우선 순위입니다.이후 select 지시어로도의 우선 순위 0, 은,실행 순서가 정의되지 않습니다.

    통지로,"undefined"은 과도한 비트,그리고 실제로 실행 순서입니다 알파벳 순서 ($compile 코드):지시어는 이름의 시작 부분에서는 사전에 더 높은 우선 순위입니다.하지만,나에서 겸허한 의견기 때문에 이것은 명시적으로 말에서 문서 에 사용할 수 없습니다 이 행동.

요약하면 다음은 몇몇 사례를 사용합니다.각 지시어 레지스터 감시자.

  Name  |  Priority  | Watcher order
--------+------------+--------------
A       | 100        | 3rd
B       | 0          | 2nd
C       | none (= 0) | 1st

따라서,문제를 해결하는 간단하다:

  • 을 실행하려는 경우에는 감시자의 사용자 정의 지시어 후에select 중 하나,그냥 당신의 지시어보다 높은 우선 순위로 0.
  • 을 실행하려는 경우에는 감시자의 사용자 정의 지시어 select 하기 때문에 부정적인 우선 순위는 금지할 수 없습니다 안정적으로습니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top