我正在尝试在指令中的元素上初始化 Swipe.js。我之前有这个工作,但我正在修改我的指令以根据轮播类型动态加载模板,然后编译它,然后初始化插件。这是我的指令:
directive('carousel', ['$compile', '$http', '$templateCache', function($compile, $http, $templateCache) {
var templateMap = {
default: 'default.html',
products: 'partials/carousel/products.html'
}, loader;
return {
restrict: 'E',
replace: true,
scope: {
type: '@',
slides: '='
},
compile: function(tElement, tAttrs) {
var template = templateMap[tAttrs.type];
loader = $http.get(template, {cache: false}).success(function(html) {
tElement.html(html);
});
return function(scope, element, attrs) {
loader.then(function() {
scope.$watch('slides', function(slides) {
if(slides) {
console.log(element);
template = angular.element($compile(tElement.html())(scope));
element.replaceWith(template);
console.log(element);
}
});
});
};
}
}
}])
当我按预期console.log(element)
记录元素时。<carousel></carousel>
当我执行replaceWith()
, thenconsole.log(element)
时,我希望它显示已加载的新替换元素,但它仍会记录轮播元素。
如果它像我期望的那样被替换,我会Swipe(element)
在新元素上做,但显然那是行不通的。
有小费吗?