2013-05-22 2 views
2

Я хочу знать, как я могу вручную получить атрибут из обратного вызова linkFn.

например. если я хочу сферу, я,

angular.element(element).scope() 

контроллер

angular.element(element).controller('ngModel') 

как насчет для ATTR.

+0

Функция ссылка уже имеет доступ к области видимости элемента в качестве первого параметра функции связующей, поэтому я не знаю, почему вам нужно будет 'angular.element (элемент) .scope() '. Доступ к атрибутам зависит от того, какой тип области действия определяет ваша директива (нет новой области действия, новой области действия, новой области выделения) и значения или значения атрибута содержат {{}} или нет. Просьба привести пример того, что вы пытаетесь сделать. –

+1

Мне интересно, можно ли получить $ attr вне директивы, размещенной на этом элементе, в тех случаях, когда я могу захотеть воздействовать на родителя и вам нужно напрямую получить доступ или посмотреть его дочерний attr, не создавая дополнительной директивы просто для этого attr. – user2167582

ответ

3

В родительском контроллере я полагаю, вы можете получить доступ к атрибутам объекта после первого присвоения его свойству область в директиве:

<div ng-controller="MyCtrl"> 
    <div my-directive attr1="one">see console log</div> 
</div> 
app.directive('myDirective', function() { 
    return { 
     link: function(scope, element, attrs) { 
      scope.attrs = attrs 
     }, 
    } 
}); 

function MyCtrl($scope, $timeout) { 
    $timeout(function() { 
     console.log($scope.attrs); 
    }, 1000); 
} 

fiddle

+0

У меня нет моей точки здесь, мне было интересно, можно ли найти attr субэлементов с помощью selector.attributes, вы решаете конкретную проблему. но спасибо за предоставленную мне информацию, я думаю, что я хочу почти невозможно – user2167582

+0

Вы должны использовать свойство 'scope' определения директивы, чтобы автоматически привязать к области нужные вам атрибуты. 1), это его цель. 2) чем больше вы добавляете в сферу действия, тем тяжелее становится цикл дайджеста. Не нужно добавлять все attrs, если вы заботитесь только о некоторых избранных. 3) вам не понадобится '$ timeout', потому что вы будете сглаживать исполнение, просто используя свойство' scope' – JAAulde

1

Используйте экземпляры $compile и $rootScope услуг, позвоните по телефону $digest, затем получите доступ к attr и attributes:

/* template string */ 
var html = "<div>ID: {{$id}}</div>"; 
/* template element creation */ 
var template = angular.element(html); 
/* compile instance */ 
var compiler = angular.injector(["ng"]).get("$compile"); 
/* rootScope instance */ 
var scope = angular.injector(["ng"]).get("$rootScope"); 
/* template compilation */ 
var linker = compiler(template)(scope); 
/* digest cycling */ 
scope.$digest(); 
/* scope linking */ 
var result = linker(scope)[0]; 
/* attr method */ 
linker.attr("class"); 
/* attribute property */ 
result.attributes; 

Список литературы

Смежные вопросы