我正在尝试同时使用 angularjs 和传单来解决问题。但是这个普遍的问题已经困扰了我一段时间,所以解决方法是一个很好的引导到“我什至从角度来看这样做是正确的方式吗?”
问题:
我正在使用传单地图,我想使用它的弹出窗口在地图上显示有关我的点的其他数据。我打算在地图上显示很多点。什么是很多?够了,当我向服务器查询点时,我只获取 id(用于稍后查询更多数据)和几何(所以我可以绘制点)。在“点击”该点时,我想联系服务器以获取与该特定点关联的所有数据并将其显示在弹出窗口中。
我有一个角度指令,它控制 DOM 中与传单相关的所有内容(传单指令)。该指令用于侦听某个点上的“点击”之类的内容。当发生这种情况时,我的指令返回到控制器,然后该控制器向服务器询问有关该点的数据并填写范围变量,以便 HTML 模板可以“填写”数据。
这里有几个问题: 1. 指令是否应该回调控制器以获取指令随后监听的数据?2. 我对指令的调用似乎是一个 hack,因为如果一个“刚刚编译”的元素感觉像是一个 hack,我必须获得范围:
angular.element(e).scope().getContent();
关于问题。Leaflet 没有在弹出窗口被渲染后发现 HTML 已经更新。这会导致宽度问题,因为弹出窗口的宽度不足以容纳文本。这是一个小插曲:
http://plnkr.co/edit/53bebb?p=preview
我尝试了一些方法来解决这个问题,但无济于事。我能想到的最好的方法是做这样的事情:
var newScope = $scope.$new();
var e = $compile('<div popup></div>')(newScope);
// don't bind yet, size problem
//marker.bindPopup(e[0]);
// listen for the click, then get data from server to fill in template
marker.on('click', function() {
angular.element(e).scope().getContent();
});
newScope.$watch("content", function(content) {
if (!content) return;
// now bind and open the popup as we should already have the content
marker.bindPopup(e[0]).openPopup();
}
然而,这并不完全有效,因为 newScope 并不是具有“getContent()”功能的控制器的真正范围。
最后,即使这确实有效,它也可能不是一个很好的解决方案,因为可以说我的服务器很慢并且需要 3 秒才能返回数据。这意味着我什至不会在点击后 3 秒内显示弹出窗口,这是一种可怕的用户体验。
我唯一剩下的就是尝试自己调整传单弹出窗口的大小,甚至不确定从哪里开始,或者这是否是个好主意。
欢迎和赞赏任何和所有帮助和批评(调整大小问题和角度使用)。
提前致谢。