Подтвердить что ты не робот

Как вызвать функцию в "ng-src"

Мне нужно иметь возможность вызывать функцию для запуска кода для динамического извлечения источника изображения. В следующем фрагменте кода показан пример того, что я хочу:

<!-- "myFunction" exists in the current scope -->
<img ng-src="myFunction()" />

Я уверен, что это должно быть просто, но я просто ничего не могу найти в документации ng-src! Кто-нибудь еще когда-либо ударил это?

Спасибо заранее!

Директива (пример основан на ответах)

Другие рекомендовали директиву. Я не могу отправить клиентский код, поэтому я написал короткий пример того, что могло бы выглядеть в plunker (см. Здесь). Основная директива:

app.directive("imageSource", function (){
  return { link: function (scope, element, attrs){
      element.attr("src", scope.imageUrlArray[attrs.imageSource]);
    }
  };
});

Я знаю, что то, что у меня здесь в качестве примера, возможно, можно было бы сделать с помощью ng-repeat, используя переменную в ng-src, но это служит примером того, как будет выглядеть директива, если бы это было необходимо.

4b9b3361

Ответ 1

<img ng-src="{{myFunction()}}" />

Fiddle

Ответ 2

Верно, попал туда в конце:

JavaScript:

 angular.module('MyApp', [])
    .controller('Ctrl2', function($scope) {
    })
    .directive('mySrc', function() {
        return {
        restrict: 'A',
        link: function ( scope, elem, attrs ) {
             //replace test with whatever myFunction() does
             elem.attr('src', 'test1');
        }
      };
    });

HTML:

<div ng-app="MyApp">
  <div ng-controller="Ctrl2">
      <img my-src />
  </div>
</div>

Fiddle

Ответ 3

Не было бы лучше передать myFunction в качестве аргумента в пользовательскую директиву? Таким образом, мы отделим два и можем легко изменить, какая функция будет проходить в будущем.

HTML

<body ng-app='testApp'>
    <div ng-controller='TestCtrl'>
        <img my-src callback='myFunction()' />
    </div>
</body>

JS:

angular.module('testApp', [])
.controller('TestCtrl', function($scope) {
    $scope.myFunction = function() {
        return 'http://nodejs.org/images/roadshow-promo.png';
    }
})
.directive('mySrc', function() {
    return {
        restrict: 'A',
        scope: {
            callback: '&'
        },
        link: function ( scope, elem, attrs ) {
            elem.attr('src', scope.callback());
        }
    };
})

http://jsfiddle.net/GLS2a/