Javascript 如何使用angularjs从html调用自定义函数?

Javascript 如何使用angularjs从html调用自定义函数?,javascript,html,angularjs,Javascript,Html,Angularjs,我想在我的js控制器中定义单独的方法,如下所示: angular.module('test').controller('mycontroller', mycontroller); function mycontroller() { //do sth }; function test(value) { console.log(value); //this is never written }; 这样我就有了一个干净的结构,

我想在我的
js
控制器中定义单独的方法,如下所示:

    angular.module('test').controller('mycontroller', mycontroller);
    function mycontroller() {
        //do sth
    };

    function test(value) {
        console.log(value); //this is never written
    };
这样我就有了一个干净的结构,每个方法都在自己的块中分离

但是当我尝试如下使用它时,没有输出

<div ng-controller='mycontroller'>
    {{test('printme')}}
</div>

{{test('printme')}

为什么?

尝试将测试功能放入控制器中,并将其更改为

$scope.test = function(value){
    console.log(value)
};

还要将$scope依赖项添加到控制器中

尝试将测试函数放入控制器中,并将其更改为

$scope.test = function(value){
    console.log(value)
};

还可以将$scope依赖项添加到控制器中

如果要保持文件外观整洁,可以遵循John Papa的样式指南:

以下是我如何修正您的问题并对其应用干净的方法:

因为我的代码在一个IIFE中,你实际上可以在该块的任何地方进行
功能测试
,而不是在控制器功能中:

angular.module('testApp', [])
  .controller('ctrl', ctrl);

function ctrl($scope) {
  /* -- Public Properties & Methods -- */

  $scope.test = test; 
}

/* -- Private Properties & Methods -- */
function test(value) {
    console.log(value);
}

我只是想按照第二种方法来做。我们多次创建希望绑定到DOM的变量:
$scope.showOptions
。如果我们在控制器之外拥有该功能,我们将无法再访问此
$scope.showOptions
,因此您将“难以”查询它。您可以通过函数参数请求变量/作用域来轻松解决这个问题。或者创建一个小的包装器函数来进行分派(几乎类似于双重分派)

这将允许您将所有主要的繁重工作保持在控制器之外,但确实引入了一个新的复杂性层,我知道我当然可以不使用它


因此,选择权在您。

如果您想保持文件外观整洁,可以遵循John Papa的风格指南:

以下是我如何修正您的问题并对其应用干净的方法:

因为我的代码在一个IIFE中,你实际上可以在该块的任何地方进行
功能测试
,而不是在控制器功能中:

angular.module('testApp', [])
  .controller('ctrl', ctrl);

function ctrl($scope) {
  /* -- Public Properties & Methods -- */

  $scope.test = test; 
}

/* -- Private Properties & Methods -- */
function test(value) {
    console.log(value);
}

我只是想按照第二种方法来做。我们多次创建希望绑定到DOM的变量:
$scope.showOptions
。如果我们在控制器之外拥有该功能,我们将无法再访问此
$scope.showOptions
,因此您将“难以”查询它。您可以通过函数参数请求变量/作用域来轻松解决这个问题。或者创建一个小的包装器函数来进行分派(几乎类似于双重分派)

这将允许您将所有主要的繁重工作保持在控制器之外,但确实引入了一个新的复杂性层,我知道我当然可以不使用它


因此,选择权在您。

当您将mycontroller设置为要使用的控制器时,范围将绑定到组件<代码>测试在此作用域中不存在。因此,最好不要将
函数测试(值){}
放到范围变量上,比如
$scope.test
当您将mycontroller设置为要使用的控制器时,范围会绑定到组件<代码>测试在此作用域中不存在。因此,最好不要将
函数测试(值){}
放在一个作用域变量上,比如说
$scope.test
,它可以工作。但是,是否还有一种方法可以在控制器功能之外定义功能块,并将对该功能的引用设置为作用域?这是可行的。但是,是否也有一种方法可以在控制器函数之外定义函数块,并将对该函数的引用设置为作用域?这可能就是我想要的。这可能就是我想要的。