当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,以便元素在点击前面,它也会禁用鼠标点击!
所以要小心框架的交互方式。