将函数表达式存储在 angularjs 指令的 link 函数中并通过 ng-click 使用它
Storing a function expression inside a link function of an angularjs directive and use it via ng-click
我有以下 angularjs 指令,我希望能够使用 ng-click 在 属性-slider.html 内执行 showMap()。我错过了什么?
(function() {
'use strict';
angular
.module('myapp')
.directive('propertySlider', propertySlider);
function propertySlider($timeout) {
return {
restrict: 'E',
templateUrl: 'property-slider.html',
replace: true,
scope: {
property: '=',
photos: '='
},
link: function(scope, element) {
$timeout(function(){
var slider = element.flickity({
cellAlign: 'left',
cellSelector: '.gallery-cell',
lazyLoad: true,
wrapAround: true,
initialIndex: 1
});
var showMap = function(){
slider.flickity('select', 0);
};
},500);
}
};
}
})();
两个问题....需要将函数分配给作用域,而您不需要在 $timeout
中创建它
link: function(scope, element) {
scope.showMap = function () {
element.flickity('select', 0);
};
$timeout(function () {
element.flickity({
cellAlign: 'left',
cellSelector: '.gallery-cell',
lazyLoad: true,
wrapAround: true,
initialIndex: 1
});
}, 500);
}
除了使用 ng-click
,您还可以将方法 "private" 保留在指令中并检测元素上的事件:
link: function(scope, element, attrs) {
element.on('click', function(e) {
showMap();
});
var showMap = ...
}
我有以下 angularjs 指令,我希望能够使用 ng-click 在 属性-slider.html 内执行 showMap()。我错过了什么?
(function() {
'use strict';
angular
.module('myapp')
.directive('propertySlider', propertySlider);
function propertySlider($timeout) {
return {
restrict: 'E',
templateUrl: 'property-slider.html',
replace: true,
scope: {
property: '=',
photos: '='
},
link: function(scope, element) {
$timeout(function(){
var slider = element.flickity({
cellAlign: 'left',
cellSelector: '.gallery-cell',
lazyLoad: true,
wrapAround: true,
initialIndex: 1
});
var showMap = function(){
slider.flickity('select', 0);
};
},500);
}
};
}
})();
两个问题....需要将函数分配给作用域,而您不需要在 $timeout
link: function(scope, element) {
scope.showMap = function () {
element.flickity('select', 0);
};
$timeout(function () {
element.flickity({
cellAlign: 'left',
cellSelector: '.gallery-cell',
lazyLoad: true,
wrapAround: true,
initialIndex: 1
});
}, 500);
}
除了使用 ng-click
,您还可以将方法 "private" 保留在指令中并检测元素上的事件:
link: function(scope, element, attrs) {
element.on('click', function(e) {
showMap();
});
var showMap = ...
}