AngularJS报错 Cannot use 'in' operator to search for 'functionName' in 1

在使用AngularJS的指令时,如果 element上有方法绑定,并且在调用该方法时候可以会抛出异常 Cannot use 'in' operator to search for 'functionName' in 1

 下面举一个具体实例,定义一个控制器 ,该控制器中有一个方法 editWebsite

app.controller('OverviewCtrl', ['$scope', '$location', '$routeParams', 'websiteService', 'helperService', function($scope, $location, $routeParams, websiteService, helperService) {
    ...     
    $scope.editWebsite = function(id) {
        $location.path('/websites/edit/' + id);
    };
}]);

再定义一个指令,该指令的 editWebsite会绑定指令上的函数

app.directive('wdaWebsitesOverview', function() {
    return {
        restrict: 'E',
        scope: {
            heading: '=',
            websites: '=',
            editWebsite: '&'
        },
        templateUrl: 'views/websites-overview.html'
    }
});

下面我们使用这个指令,该指令的 edit-website绑定饿了controller中的 editWebsite(id)

<wda-websites-overview heading="'All websites'" websites="websites" edit-website="editWebsite(id)"></wda-websites-overview>
接下来看看 指令是如何使用这个函数的,如下,当点击td时,会调用 edtiWebsite()函数,并且将website.id作为参数传入

<td data-ng-click="editWebsite(website.id)">EDIT</td>

如果这么使用,再点击td时,控制台就会报错

TypeError: Cannot use 'in' operator to search for 'editWebsite' in 1

原因及解决方法: 原因是使用&绑定的函数,其中的参数要使用json的格式来传递,即向下面这样传递

data-ng-click="editWebsite({id: website.id})"
或者使用onClick封装一层

data-ng-click="onClick(website.id)"
并且在link中定义 

$scope.onClick = function(id) {
  // Ad "id" to the locals of "editWebsite" 
  $scope.editWebsite({id: id});
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值