我想通过有一个指令装饰所有我的锚定标记给定列表中的一个指令,所以我不必复制/粘贴相同代码超过&。Angular指令来装饰锚定标记与另一个指令不工作
到目前为止,它的效果很好,除了当我用动态装饰链接启动模态时,我得到的是原始图像代码与实际渲染图像。在我的测试中,我手动将指令放在前几个链接&上,让它装饰引导模态属性&它工作得很好。
这是装饰所有的锚在列表中的指令:
angular.module('wmApp.wmAddImageModal', [])
.directive('wmAddImageModal', function() {
return {
restrict: 'A',
link: function ($scope, element, $attrs) {
var anchors = element.find('a');
angular.forEach(anchors, function (anchor) {
var a = angular.element(anchor);
a.attr('data-wm-image-modal', '');
a.attr('data-toggle', 'modal');
a.attr('data-target', '#wm-modal');
});
}
};
});
这是被点击的锚时,该指令。我试图data-ng-src
为好,没有运气:
angular.module('wmApp.wmImageModal', [])
.directive('wmImageModal', function() {
return {
restrict: 'A',
link: function($scope, element, $attrs) {
element.on('click', function($event) {
$event.preventDefault();
var imgUrl = window.location.origin + '/' + $attrs.href,
content = '<div class="modal-header"><h3 class="modal-title">' + $attrs.title + '</h3></div>' +
'<div class="modal-body"><img src="' + imgUrl + '" width="100%"></div>';
$('#wm-modal .modal-content').html(content);
});
}
};
});
并为完整起见,我包括我使用的引导模式脚手架。整个模式是不是该指令的元素的一个孩子,但兄弟姐妹到列表:
<div class="modal fade" id="wm-modal" role="dialog">
<div class="modal-dialog modal-lg">
<div class="modal-content"></div>
</div>
</div>
锚的名单,因为它是生:
<ul data-wm-add-image-modal>
<li>
<h4>
<a href="path/to/image.png" title="An awesome description">
2016: Screenshot</a>
</h4>
<p>
An awesome description
</p>
</li>
<li>
<h4>
<a href="path/to/image.png" title="An awesome description">
2016: Screenshot</a>
</h4>
<p>
An awesome description
</p>
</li>
<li>
<h4>
<a href="path/to/image.png" title="An awesome description">
2016: Screenshot</a>
</h4>
<p>
An awesome description
</p>
</li>
</ul>
这是什么样子后wm-add-image-modal
装饰每个锚固:
<ul data-wm-add-image-modal>
<li>
<h4>
<a href="path/to/image.png" title="An awesome description" data-wm-image-modal data-toggle="modal" data-target="#wm-modal">
2016: Screenshot</a>
</h4>
<p>
An awesome description
</p>
</li>
<li>
<h4>
<a href="path/to/image.png" title="An awesome description" data-wm-image-modal data-toggle="modal" data-target="#wm-modal">
2016: Screenshot</a>
</h4>
<p>
An awesome description
</p>
</li>
<li>
<h4>
<a href="path/to/image.png" title="An awesome description" data-wm-image-modal data-toggle="modal" data-target="#wm-modal">
2016: Screenshot</a>
</h4>
<p>
An awesome description
</p>
</li>
</ul>
图像的怪异象形文字加载。该模式本身不是问题,它加载,只是没有图像:
编辑#1:我看到,随着指令断点调试时,只有第一锚触发的指令。如果我在另一个选项卡中将图像拉出一次,那么每次单击列表中的任何链接时都会加载同一个第一个图像,但同一手上。我可以告诉它识别出wmImageModal
指令中带有断点/监视的content
变量值被点击的不同锚点。
我可以看到modal-content
元素更新与点击装饰的锚点时显示相同的数据,但它不会显示图像。有任何想法吗?将图像直接加载到新选项卡中将显示图像而不是“heiroglyphs”。
EDIT#2:对于笑声,我添加一个的console.log到wmImageModal指令和简化了content
字符串:
console.log('element', element, content);
元素本身是不同的每个链接点击&也证明了content
输出的值。我手动将data-wm-image-modal data-toggle="modal" data-target="#wm-modal"
属性添加到列表中的前5个链接。第一次点击给了我'heiroglyph'图像,然后任何后续点击实际上加载图像。
在呈现之前使用jQuery的$('#wm-modal .modal-content').html(content)
之前,发生了一些值content
。
编辑#3: 好吧,我发现有对图像制成,一个是的开发工具在网络选项卡上XHR 2级的要求,但我不完全知道为什么。这绝对是jQuery(v2.2.3)& Bootstrap(v3.3.6)这样做。
以下是来自XHR调用堆栈的相关行:
send @ lib.js:9203 xhr.send(options.hasContent && options.data || null);
jQuery.extend.ajax @ lib.js:8684 try { state = 1; transport.send(requestHeaders, done); }
jQuery.fn.load @ lib.js:9450 jQuery.ajax({ url: url, type: type || "GET", dataType: "html", data: params })
Modal @ lib.js:46913 this.$element.find('.modal-content').load(this.options.remote, $.proxy(function() { this.$element.trigger('loaded.bs.modal') }, this))
(anonymous function) @ lib.js:47179 if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
jQuery.extend.each @ lib.js:365 for (; i < length; i++) { if (callback.call(obj[ i ], i, obj[ i ]) === false) {break;} }
jQuery.fn.jQuery.each @ lib.js:137 each: function(callback) { return jQuery.each(this, callback); },
Plugin @ lib.js:47174 function Plugin(option, _relatedTarget) { return this.each(function() {
(anonymous function) @ lib.js:47217 Plugin.call($target, option, this)
jQuery.event.dispatch @ lib.js:4737 ret = ((jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler).apply(matched.elem, args);
elemData.handle @ lib.js:4549 return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? jQuery.event.dispatch.apply(elem, arguments) : undefined;
1日可更换''src'with NG-src',我认为这可能会更好。其次,我不能看到你附加'.modal-content'的位置,但是如果它附加到每个图像div上,那么每个图像div都将被替换为$('#wm-modal .modal-content')。html内容);'你是否记录了你获得的内容'并且试图手动将它添加到chrome dev中? –
我试过ng-src,但它不是为src呈现的控制器值,而是一个串联的字符串。 '$('#wm-modal .modal-content')'正在更新。它不包含在我的代码中,因为那部分工作正常,但是它是典型的引导模式脚手架,并且只有一个模式的内容在点击时得到更新。我已经看过“内容”呈现为与断点/观察者一样的情况,该值是正确的。 – cmeza