当前位置: 首页 > 面试题库 >

ng-click不会在AngularJS中触发,而onclick会触发

秦经义
2023-03-14
问题内容

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

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

<div class="navbar-collapse collapse">
    <table class="table table-striped" ng-controller="FetchViewData">
        <tr>
            <td>Name</td>
            <td>ID</td>
            <td>Department</td>
            <td></td>
        </tr>
        <tr ng-repeat="d in viewData">
            <td>{{d.EmployeeName}}</td>
            <td>{{d.EmployeeID}}</td>
            <td>{{d.EmployeeDepartment}}</td>
            <td>
                <button class="trashButton" type="button" 
                name="view:_id1:_id2:_id14:_id24:btnDelete" 
                id="view:_id1:_id2:_id14:_id24:btnDelete" 
                ng-click="deleteRecord('{{d['@link'].href}}')">
                <img src="/trashicon.gif"></button>
            </td>
        </tr>
    </table>
</div>

这是FetchViewData获取信息并将其显示给用户的功能。

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

数据已获取并正确显示。

但是,ng-click="deleteRecord('{{d['@link'].href}}')"单击删除按钮后,不会触发其中的代码。在GoogleChrome浏览器的开发人员工具中,我可以看到为代码生成了有效值,{{d['@link'].href}}但未deleteRecord触发代码。从我尝试去掉花括号并只写东西,d['@link'].href但这对我没有用。

当我更换ng-click使用onclickdeleteRecord功能被炒鱿鱼。

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 = "<MY LINK>";
    $http.get(test_link).success( function(data) {
        $scope.viewData = data;
    });
    $scope.deleteRecord = function(docURL) {
        console.log(docURL);

        $http.delete(docURL);
    }   
}

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

当您使用单击时,它可以正常工作,因为您的函数存在于全局名称空间中,这是单击时的外观。Angular非常依赖范围界定以保持名称空间整洁,这里有很多信息:https : //github.com/angular/angular.js/wiki/Understanding-
Scopes



 类似资料:
  • 问题内容: 我使用的是ng-click,将其应用于SPAN标签时会触发两次。 HTML 控制器 它应该只发射一次。我如何找到这种情况的发生原因以及如何解决? 问题答案: 您提供的代码不会两次触发该事件: http://jsfiddle.net/kNL6E/(单击) 也许您两次包含Angular?如果执行此操作,则会收到两个警报,如下所示: http://jsfiddle.net/kNL6E/1/

  • 问题内容: 我正在尝试进行变量替换,同时也使它可以通过ngClick单击。 我做了一个小矮人演示(单击按钮,观察输入框保持不变) 标记: 角度的东西: 问题是:为什么单击按钮时不触发。应该在输入字段中设置值’foobar’。 问题答案: 同时,有一个针对该问题的官方解决方案: 无需编写自定义指令即可进行编译。 有关更多信息:https : //github.com/angular-translat

  • 正如标题所说,我根本无法让Quartz.net工作。我从NuGet获得了最新版本的Quartz.net(2.2.1)、Common.Logging(2.1.2)、Common.Logging.NLog(2.0.0)和NLog(2.1.0)。触发器没有被触发,而且石英绝对没有记录任何东西。我猜我搞砸了配置。 我的应用程序配置: 有一个作业和一个触发器与之相关: 调度程序将启动,作业和触发器将正确添加

  • 我们正在运行java应用程序,该应用程序用作24/7运行的监控系统。我们有一些内存问题,所以我做了一个jmap转储,我可以分析它。在我使用live flag进行第二次转储之后,GC也在应用程序中运行,它的内存使用率再次降低(该进程现在运行了6个月)。所以我的问题是,如果在jmap转储之后,它可以执行GC,那么在此期间GC为什么不由进程本身运行,进程在此之后正常运行,并且它的内存使用情况正常? Op

  • 问题内容: 我试图设置一个监听器来确定何时按下输入按钮,但是根本没有触发。我在装有Android 4.2.2的LG Nexus 4上进行了测试。可以在具有Android 2.3的Amazon Kindle Fire上使用,并且无处可用!我也无法为按钮设置文本。这是代码: 我究竟做错了什么?我怎样才能解决这个问题? 问题答案: 您可以使用TextWatcher。

  • 问题内容: 我正在尝试从触发元素的click事件。 通常的做法是隐藏被称为丑化的野兽,并通过其他方式触发其点击事件。 问题答案: 如果您的输入和按钮是同级(在您的情况下是OP): 使用指令将按钮的单击绑定到文件输入,如下所示: