我在我的应用程序中使用angularJS 1.5 component
。组件控制器的示例代码如下:
function testController()
{
var vm = this;
activate(); // this will be called on first load on component.
vm.testMethod = function ()
{
return "test Method";
}
function activate()
{
console.log(vm.testMethod());
}
当我执行此操作时,我收到错误
TypeError:vm.testMethod不是函数。
我知道我可以为控制器创建一个本地函数,而不是附加 vm.
,但是,根据我的需要,我在模板中使用vm.testMethod()
来返回一些文本,这是正常的。例如
--template code
{{$ctrl.testMethod()}} // This works properly and display 'test Method' on page.
由于某种原因,我试图在其他方法中调用vm.testMethod()
,例如activate()
,但是上面提到了错误?
我是否知道是否遗漏了任何东西或尝试了一些无法做到的事情。
答案 0 :(得分:1)
你的问题与Angular没有任何关系: - )
您的activate
函数已挂起,因为它是一个函数声明。这就是为什么你可以在你写它之前把它叫做#34;但是,vm.testMethod
是一个函数表达式,并且不会被提升。
这是一个超级简单的示例,显示您遇到的问题:
var vm = {};
console.log(vm.hello);
vm.hello = function () {};
console.log(vm.hello);

我建议您阅读this article,以便更好地理解表达式和声明在JavaScript中的工作原理。另外,为了防止再次发生这种情况,您应该遵循this advice from John Papa:
始终在控制器底部编写函数声明,并在定义vm
变量时将它们分配到顶部。