当onclick执行时,ng-click不会在AngularJS中触发

我试图在我的应用程序中使用AngularJS并在某种程度上取得了成功。

我能够获取数据并将其显示给用户。 我在ng-repeat有一个按钮,我想发布DELETE请求。 下面是我的代码。

  

这是FetchViewData函数,它获取信息并将其显示给用户。

 function FetchViewData($scope, $http) { var test_link = ""; $http.get(test_link).success( function(data) { $scope.viewData = data; }); } 

获取并正确显示数据。

但是, ng-click="deleteRecord('{{d['@link'].href}}')"删除按钮时, ng-click="deleteRecord('{{d['@link'].href}}')"中的代码不会触发。 在Google Chrome的开发者工具中,我可以看到代码{{d['@link'].href}}有效值,但代码deleteRecord不会被触发。 从这个问题我尝试删除括号并只写d['@link'].href但它对我不起作用。

当我用onclick替换ng-click时, deleteRecord函数被触发。

 function deleteRecord(docURL) { console.log(docURL); $http.delete(docURL); } 

但后来我收到以下错误。

 Uncaught ReferenceError: $http is not defined deleteRecord onclick 

我正在使用jQuery 1.10.2和AngularJS v1.0.8。

这里的FetchViewData是一个控制器,在你的html中,你有ng-controller =“FetchViewData”,你告诉它在任何角度方法和变量的控制器范围内查看。

这意味着,如果要在单击时调用方法,则需要调用附加到控制器范围的内容。

 function FetchViewData($scope, $http) { var test_link = ""; $http.get(test_link).success( function(data) { $scope.viewData = data; }); $scope.deleteRecord = function(docURL) { console.log(docURL); $http.delete(docURL); } } 

这里,函数存在于作用域中,并且FetchViewData Controller中的任何html都可以访问该作用域,并且您应该能够调用您的方法。

当你使用on-click时它会起作用,因为你的函数存在于全局命名空间中,这就是on-click所在的位置。 Angular非常依赖于作用域以保持您的名称空间清洁,这里有很多信息: https : //github.com/angular/angular.js/wiki/Understanding-Scopes

INSTEAD这个

 ng-click="deleteRecord('{{d['@link'].href}}')" 

试试这个

 ng-click="deleteRecord(d['@link'].href)" 

您不需要在ng-click中使用大括号({{}})

请享用…

  function deleteRecord(docURL) { console.log(docURL); $http.delete(docURL); } 

它应该是

  $scope.deleteRecord = function (docURL) { console.log(docURL); $http.delete(docURL); } 

编辑:改变HTML和控制器中的东西….

看工作演示

应在当前和正确的范围内分配deleteRecord方法

 $scope.deleteRecord = function(){ .... 

如上所述,该函数应在范围内创建:

  $scope.deleteRecord = function (docURL) { console.log(docURL); $http.delete(docURL); } 

要使用此function,首先删除“{{}}”,因为您在ng-repeat中使用它。 另一个问题是在你的代码中使用了撇号,你在另一个中有两对……我相信你会遇到问题。

使用这样的function:

 ng-click="deleteRecord(d['@link'].href)" 

祝你好运!

如果要将其用作提交按钮,请将类型设置为“提交”:

 

为什么ng-click不会触发的另一种可能性是你应用了一种CSS样式的pointer-events:none; 对元素。 我发现Bootstrap的form-control-feedback类适用于那种风格。 因此,即使它将z-index提高2,以便元素在点击前面,它也会禁用鼠标点击!

所以要小心框架的交互方式。