1

ДирективаAngularJs директива - привязать дочерний элемент

app.directive('mcAvatar', function() { 
    return { 
     restrict: 'E', 
     scope: { 
      width: '=width', 
      src: '@src' 
     }, 
     templateUrl: 'directives/mc-avatar/mc-avatar.html', 
     link: function (scope, element, attrs) { 
      console.log(element[0]) 
     } 
    }; 
}); 

Шаблон

<img width="{{ width }}" src="{{ src }}" alt="" class="mc-avatar-round">

Использование

<mc-avatar width="50" src="http://lorempixel.com/320/320/cats"></mc-avatar>

element внутри функция связи в возвращениях директивы:

<mc-avatar width="50" src="http://lorempixel.com/320/320/cats" class="ng-isolate-scope"> 
    <img width="50" src="http://lorempixel.com/320/320/cats" alt="" class="mc-avatar-round"> 
</mc-avatar> 

, который дает контекст только mg-avatar. Как мне получить доступ к элементу img здесь, чтобы я мог использовать функции bind?

+0

Как насчет 'console.log (angular.element (element.children() [0]))'? –

+0

@DavidR возвращает элемент img, но я не могу использовать 'bind': /' element.children() [0] .bind не является функцией' – CENT1PEDE

+0

try 'replace: true' option – Sravan

ответ

1

Вы можете использовать element.find("img"); в вашем directive, а затем использовать .bind заявление по этому приложить события.

Надеюсь, что это поможет !.

1

Вот вам необходимый код,

<!DOCTYPE html> 
 
<html> 
 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script> 
 
<body ng-app="myApp"> 
 

 
<mc-avatar width="50" src="http://lorempixel.com/320/320/cats"></mc-avatar> 
 

 
<script> 
 
var app = angular.module("myApp", []); 
 
app.directive('mcAvatar', function() { 
 
    return { 
 
     restrict: 'E', 
 
     replace: false, 
 
     scope: { 
 
      width: '=width', 
 
      src: '@src' 
 
     }, 
 
     
 
     template: '<img width="{{ width }}" src="{{ src }}" alt="" class="mc-avatar-round">', 
 
     link: function (scope, element, attrs) { 
 
      console.log(element.find("img")) 
 
     } 
 
    }; 
 
}); 
 
</script> 
 

 
</body> 
 
</html>

Пожалуйста, запустите сниппет.

Here is a working Demo