在指令和单元测试套件中使用原生javascript插件
Working with native javascript plugin in directive and unit test suite
我有一个原生javascript插件,它被包装在一个指令中,并以angular的方式使用。
几行指令,
export default function () {
'use strict';
return {
restrict: 'E',
scope: {
map: '=',
options: '='
},
replace: true,
template: '<div id="map" class="leaflet-map"></div>'
link: function(scope, element, attrs) {
//This code of native js class that
//is injecting svg inside given template
scope.map = new MP.Map(scope.options);
}
};
}
HTML <mp-map options="opt" map="mapOpt"></mp-map>
预期HTML <div id="map"><svg>.. nodes of map .. </svg></div>
首先,我试图访问mapOpt(即Mp的实例。在init上映射或绑定原生js类(在指令的link方法中),但无法获得MP的实例。在angular控制器中映射。然后我尝试使用$timeout(没有任何异步数据),所以它工作了。
其次,我为指令写了一个单元测试,以确保<mp-map>
被指令的模板取代。但是它会抛出错误"Map container not found"(即本机代码抛出的错误)。
看来,我定义指令的第一步是错误的。
向盎格鲁人寻求帮助。
我希望能及时得到帮助。
谢谢。
EDIT:几行MP类(自定义类)
FP.Map = L.Class.extend({
options: {
container: 'map',
.....
},
....
// Map options
this.options.map = L.extend(this.options.map, options.map);
this.map = L.map(this.container, this.options.map);
})
抛出错误"Map container not found"(即本机代码抛出的错误)。
你的MP如何?映射实例知道使用什么元素吗?使用传单,您添加您想要使用的元素作为第一个参数,选项对象作为第二个:new L.Map(element[0], scope.options);
我看到你在做:new MP.Map(scope.options);
你的MP。Map不知道该使用什么元素。很难说,因为我和谷歌完全不熟悉MP.map
。这和传单有什么关系?也许你可以分享一些代码。
无法获取MP实例。映射到angular控制器
控制器代码在指令的link函数之前运行。所以当你尝试通过控制器中的$scope.map
访问map实例时,它还不可用。有多种方法可以解决这个问题。
- 在
$scope.map
上使用$watch
并等待实例:http://plnkr.co/edit/N9DwdHQUIzxhqax6mwMm?p=preview -
scope.$broadcast
一个事件实例化后,并捕获它在你的控制器:http://plnkr.co/edit/QB8fXMM67FD4NgMS49j7?p=preview 在你的控制器中绑定回调函数:http://plnkr.co/edit/PFvJzSliDo8uLFk8HgOi?p=preview - 在服务中创建一个承诺并解析它:http://plnkr.co/edit/DoJpGqtR7TWmKAeBZiYJ?p=preview
相关文章:
- jQuery $.data() 函数的香草替代品:任何原生 JavaScript 替代品
- 使用原生 JavaScript 防止轮播中的气泡
- 如何在原生 JavaScript Promise 中包装 jsonP 回调
- 在原生JavaScript中获取画布中鼠标位置的最现代方法
- 在原生 Javascript 中查找带有类的元素的索引
- 原生 JavaScript JSON.parse 抛出 typeError
- 原生 JavaScript 在调整大小后获取浏览器宽度,然后运行一个函数
- 使用原生 JavaScript 在过渡中获取 CSS 值
- 如何从 React 原生 JavaScript 语法切换到 ES6
- 在原生 JavaScript 中移动棋子
- j查询 |从jQuery到原生javascript
- 原生 JavaScript 函数是否类似于“超全局”?
- 什么是原生JavaScript语法中的$httpProvider.defaults.headers.common
- jQuery在纯原生javascript中的“on”和“off”
- 使用SeleniumWebDriver和原生javascript来衡量性能
- 浏览器对“数字集市”/“伪造”的支持程度如何?lib(原生JavaScript TLS实现)
- 原生javascript中的ISO日期比较
- 原生javascript点击dom元素
- 如何将jquery ajax转换为原生javascript
- 为什么UnderscoreJS有很多原生Javascript函数的包装函数?