ng-click没有调用我的控制器函数

时间:2016-02-26 18:52:39

标签: angularjs

我用相同的文字阅读了很多问题,但没有人帮助我,所以我问了一个新问题。

我有一个ng-app,ng-controller。

<div ng-app='mainApp'>
<div ng-init='period=".$_REQUEST['period']."' ng-controller='debtController'>

然后,有些线条咆哮,定义它们。

<script type='text/javascript'>
    var app = angular.module('mainApp', []);                               
        app.controller('debtController', function(){
            openDebt = function(period){
                console.log(period);
            }
    });
</script>

最后但并非最不重要的是,一个调用定义函数的ng-click。

<a href="#" ng-click="openDebt('{{period}}')" />+</a>

所以,如果我用ng-click单击'+',则没有任何反应。但是,如果我在那里检查HTML,并在ng-click中复制文本,然后将其粘贴到控制台中,它就可以工作。为什么没有调用函数?

有人有任何想法吗?

3 个答案:

答案 0 :(得分:1)

您可以简单地传递没有表达式的变量

更改自:

<a href="#" ng-click="openDebt('{{period}}')" />+</a>

要:

<a href="#" ng-click="openDebt(period)" />+</a>

答案 1 :(得分:1)

最佳方法

请注意as语法。这为控制器创建了一个别名

<div ng-init='period=".$_REQUEST['period']."' ng-controller='debtController as debt'>

更改与控制器别名相关的ng-click

<a href="#" ng-click="debt.openDebt('period')" />+</a>

在控制器代码中使用this将控制器与html相关联

var app = angular.module('mainApp', []);                               
        app.controller('debtController', function(){
            this.openDebt = function(period){
                console.log(period);
            }
    });

答案 2 :(得分:0)

好的,首先将openDebt嵌入到控制器内的范围:$scope.openDebt。其次,在ng-click中,您不需要handlebar来传递值。

<script type='text/javascript'>
    var app = angular.module('mainApp', []);                               
        app.controller('debtController', function($scope){
           $scope.openDebt = function(period){
                console.log(period);
            }
    });
</script>

<强> HTML:

<a href="#" ng-click="openDebt(period)" />+</a>

PLUNKER示例: http://plnkr.co/edit/OyhBWkrREtt2JT2IWuVN?p=preview