【发布时间】:2013-10-31 14:59:15
【问题描述】:
假设我在 AngularJS 中有一个控制器:
myApp.controller('SearchController',
function ($scope, UserService) {
// for intellisense, UserService is undefined here
var user = UserService.getUsers().then(function(data){
// yada yada
}, function(err){
// yada yada
});
});
但是,在我的智能感知文件中,我可以动态注入 UserService 来获得它的功能,如下所示:
intellisense.addEventListener('statementcompletion', function (event) {
// tried doing this, but doesn't work!
// event.target = {};
var injector = angular.injector(['ng', 'myApp']);
var dependency = injector.get(event.targetName);
event.items = [];
for (method in dependency) {
intellisense.logMessage(method);
event.items.push({ name: method, kind: 'field', value: function () { } });
}
});
现在,如果我有一个定义为UserService = {} 的全局变量(或函数变量),并且在我的控制器函数中输入UserService.,我将弹出服务中的所有函数。但是如果我没有定义它,因为它被智能感知解释为undefined,即使statementcompletion 正在工作(如在Javascript语言服务控制台中看到的那样),它也无法向我显示选项。
我的问题是,除了注释函数之外,还有没有将UserService 定义为智能感知文件中的对象?定义 event.target = {} 不起作用(参见上面的智能感知代码)。
【问题讨论】:
-
我现在使用的后备技巧是将我的对象设置为一个空值(如果尚未设置),那么我就有一个可以在智能感知中使用的目标。在上面的示例中,我将只包含 $scope = $scope || {};在我的职能开始时。这是一个 hack,但确实有效。
-
我想过这样做,但它会弄乱源代码,这是不可取的。相反,我所做的是“调用”角度组件(如控制器、服务..等),它们基本上是带有智能感知代码中的空对象的函数。瞧,你有你想要的所有智能感知!
-
你是怎么做到的?有代码示例可以指点我吗?
-
查看答案。
标签: javascript angularjs visual-studio-2012 intellisense javascript-intellisense