AngularJS 1.5在组件的控制器中调用另一个方法

时间:2016-08-10 18:59:13

标签: angularjs

我在我的应用程序中使用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(),但是上面提到了错误?

我是否知道是否遗漏了任何东西或尝试了一些无法做到的事情。

1 个答案:

答案 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变量时将它们分配到顶部。