유효한 지시어는 이름
-
21-12-2019 - |
문제
나는 아주 특정한 문제점과 지침을 시작으로 특정 문자(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
에서 두 번째 다이제스트(을 때 아약스가 완료되).
어디에이 동작에서 오는가?
해결책
많은 노력을 기울이고 있 메커니즘은 여기에는 참여하는 설명이 행동:
가에서 실행되도 같은 순서 그들이 등록되어 있는지(참조 코드
$watch
방법()).포스트 링크 기능을 수행에 역 순서 의 우선 순위(에 대한 설명서를 참조하십시오
priority
성).지시어와 같은 우선 순위에서 실행되는 정의되지 않은 순서입니다.기본 우선 순위는
0
, 그래서 모든 사용자 지정 지시어를 여기에는 이 우선 순위입니다.이후select
지시어로도의 우선 순위0
, 은,실행 순서가 정의되지 않습니다.통지로,"undefined"은 과도한 비트,그리고 실제로 실행 순서입니다 알파벳 순서 (보
$compile
코드):지시어는 이름의 시작 부분에서는 사전에 더 높은 우선 순위입니다.하지만,나에서 겸허한 의견기 때문에 이것은 명시적으로 말에서 문서 에 사용할 수 없습니다 이 행동.
요약하면 다음은 몇몇 사례를 사용합니다.각 지시어 레지스터 감시자.
Name | Priority | Watcher order
--------+------------+--------------
A | 100 | 3rd
B | 0 | 2nd
C | none (= 0) | 1st
따라서,문제를 해결하는 간단하다:
- 을 실행하려는 경우에는 감시자의 사용자 정의 지시어 후에 이
select
중 하나,그냥 당신의 지시어보다 높은 우선 순위로0
. - 을 실행하려는 경우에는 감시자의 사용자 정의 지시어 기 이
select
하기 때문에 부정적인 우선 순위는 금지할 수 없습니다 안정적으로습니다.