需要在模板元素中使用变量(在指令的控制器元素内定义)。
angular.module('home').directive('mediaTile', function(){
return {
restrict: "AE",
replace: 'true',
scope: {
media: '=',
displayFilter: '='
},
controller: function($scope){
var vm = this;
vm.mediaImageActual = 'img/large-tiles.png'; }
},
controllerAs: 'vm',
template: '<div>' +
'<img preload-image ng-src="{{vm.mediaImageActual}}">' +
'</div>'
};
});
<div media-tile display-filter="view.displayFilter" media="dataList.lists[0]"></div>
ng-src没有得到正确的值,即vm.mediaImageActual。
我尝试了this之类的在线解决方案但无法解决问题。 怎么了?
答案 0 :(得分:1)
的script.js
var app = angualr.module('app', []);
app.directive('mediaTile', function(){
return {
restrict: "AE",
replace: 'true',
scope: {
media: '=',
displayFilter: '='
},
controller: function($scope){
var vm = this;
vm.mediaImageActual = 'img/large-tiles.png';
},
controllerAs: 'vm',
template: '<div>{{vm.mediaImageActual}}"' +
'</div>'
};
});
HTML
<!DOCTYPE html>
<html data-ng-app="app">
<head>
<title></title>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js"></script>
<script src="script.js"></script>
</head>
<body>
<div media-tile displayFilter="view.displayFilter" media="dataList.lists[0]"></div>
</body>
</html>
答案 1 :(得分:0)
尝试在指令中设置bindToController: true
。
您可以找到更多详情here
使用bindToController和controllerAs语法,将控制器视为类类对象,将它们实例化为构造函数,并允许我们在实例化后将它们命名为
如果您使用的是angularJs1.6或更高版本,则可以使用component
代替默认设置了所有这些属性的指令