Мне нужно управлять DOM из моей функции связывания.
Я заметил, что когда для параметра replace установлено значение false, я могу получить доступ к DOM (http://jsfiddle.net/bcsU8/)
//body of directive
return {
restrict: 'A',
replace: false,
scope: {
bar: '@myDir'
},
template: '<div id="{{bar}}">foo bar is <span>{{bar}}</span></div>',
link: function(scope, element, attr) {
scope.$watch('myDir', function(value) {
console.log('In watch - scope.bar: ', scope.bar);
console.log('DOM accesible? ', $("#"+scope.bar).length == 1);
});
}
};
но когда я установил для него значение true, я не могу (http://jsfiddle.net/PpXgb/)
return {
restrict: 'A',
replace: true,
scope: {
bar: '@myDir'
},
template: '<div id="{{bar}}">foo bar is <span>{{bar}}</span></div>',
link: function(scope, element, attr) {
scope.$watch('myDir', function(value) {
console.log('In watch - scope.bar: ', scope.bar);
console.log('DOM accesible? ', $("#"+scope.bar).length == 1);
});
}
};
Почему я не могу получить доступ к DOM при включенной замене? Я не нашел в документации ничего, что указывало бы на разницу между этими двумя случаями.
Из документации по функции связывания похоже, что DOM доступна после процесса связывания: (http://docs.angularjs.org/guide/directive)
Функция пост-связывания Выполняется после связывания дочерних элементов. Преобразование DOM с помощью функции пост-связывания безопасно.
Обратите внимание, что в моей области. $ Watch я фактически вызываю плагин jQuery, который ожидает, что DOM будет там, а не получить доступ к элементам напрямую через $ ()
ng-repeat="bar in foo"
должен быть наli
, а не наul
- person Alex Osborn   schedule 12.03.2013