Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用ng repeat中的变量动态设置ng click上的参数_Javascript_Angularjs - Fatal编程技术网

Javascript 如何使用ng repeat中的变量动态设置ng click上的参数

Javascript 如何使用ng repeat中的变量动态设置ng click上的参数,javascript,angularjs,Javascript,Angularjs,我试图在我的标签中获取{{date | date:'dd'}}表达式,并将其作为方法参数插入我的ng click。问题是,当我尝试此操作时,我得到一个未定义的不是一个函数错误。{{}表达式按其应该的方式填充,但它看起来进入ng click的date的行为就像一些未定义的变量。我不知道如何解决这个问题,任何帮助都将不胜感激 <div ng-controller="methodController"> <div class="btn-group" data-ng-repea

我试图在我的标签中获取
{{date | date:'dd'}}
表达式,并将其作为方法参数插入我的
ng click
。问题是,当我尝试此操作时,我得到一个
未定义的不是一个函数
错误。
{{}
表达式按其应该的方式填充,但它看起来进入
ng click
date
的行为就像一些未定义的变量。我不知道如何解决这个问题,任何帮助都将不胜感激

<div ng-controller="methodController">
    <div class="btn-group" data-ng-repeat="date in dates">
        <label data-ng-click="method(date | date:'dd')">{{date | date:'dd'}}</label>
    </div>
</div>
我的方法在
methodController
中定义为:

$scope.method = function (date) {
//code guts
}

如果我理解你的问题:

您希望将过滤后的
日期
传递给您的方法(在控制器内部定义)

为此,您可以:

  • 在控制器中定义过滤器

    app.controller('DemoController',函数($scope,$filter){
    $scope.dateFilter=$filter('date');
    });

  • 在您的视图中调用它

    ng click=“方法(日期过滤器(日期,'dd'))”


  • 我认为问题与
    方法的定义有关

    因此,我建议采用以下设计,使事情更紧密地联系在一起

    将控制器内的方法定义为
    $scope
    对象的属性,如下所示

    $scope.method = function(date)
    {
     //your method logic here
    }
    
    <div ng-controller="YourController as c" />
    ...
    <div class="btn-group" ng-repeat="date in dates">
        <label ng-click="c.method(date)">{{date | date:'dd'}}</label>
    </div>
    ...
    </div>
    
    然后调用标记中的方法,如下所示

    $scope.method = function(date)
    {
     //your method logic here
    }
    
    <div ng-controller="YourController as c" />
    ...
    <div class="btn-group" ng-repeat="date in dates">
        <label ng-click="c.method(date)">{{date | date:'dd'}}</label>
    </div>
    ...
    </div>
    
    
    ...
    {{date}日期:'dd'}
    ...
    
    以其他建筑为基础。$filter函数似乎就是答案。但是在控制器逻辑中过滤它,而不是在视图中的方法中过滤它。这是一本书

    
    头衔

    • 单击此处:{{date | date:'dd'}}
    角模('plunker') .controller('MainCtrl',函数($scope,$filter){ $scope.dates=[]; $scope.newDate=新日期(); var today=$scope.newDate 对于(i=-3;i<0;i++){ $scope.dates.push(today.setDate(today.getDate()+i)); } $scope.alert=函数(a){ 变量b=$filter('date')(a,'dd'); 警报(b); }; });
    请添加一些解释,说明这将如何解决问题。有关如何做出一个好答案的提示,请参阅。@MikeMcCaughan希望现在更好。我在问题中添加了更多信息。从外观上看,您的答案中我唯一缺少的是控制器别名。我在方法中设置了一个
    console.log(date)
    ,现在似乎
    ng单击甚至没有击中该方法。我尝试了它,它与我一起工作。不知道你怎么了。然而,我看到你已经得到了一个有效的答案。是的,干杯-没问题。Angularjs团队经常引用它,因此我尝试了它,并且比其他人更喜欢ui/功能。