【问题标题】:Unable to call JavaScript prototype function from angularjs无法从 angularjs 调用 JavaScript 原型函数
【发布时间】:2015-03-31 01:18:54
【问题描述】:

我正在尝试通过 ng-click 的超链接调用 JavaScript 原型函数,如下所示。但我无法在点击链接时触发getInfo() 功能。我是否缺少任何基础知识或做错了什么?

这是我的 JS:

$(document).ready(function () {
    function Apple() {
        this.type = "fff";
        this.color = "red";

    }
    Apple.prototype.getInfo = function () {
        alert( this.color + ' ' + this.type + ' apple');
    };
    var appl = new Apple();
});

这是我的html:

  <a href="" ng-click="appl.getInfo()">click</a>

【问题讨论】:

  • 你的控制器在哪里
  • 您应该在控制器中创建对象并将应用程序分配给范围

标签: javascript jquery angularjs jquery-events


【解决方案1】:

查看您上面的代码,我相信问题在于您没有将appl 暴露给您的通过(通过$scope)。你需要做更多这样的事情:

var MyController = function($scope) {
  function Apple() {
    this.type = "fff";
    this.color = "red";

  };
  Apple.prototype.getInfo = function () {
    alert( this.color + ' ' + this.type + ' apple');
  };
  $scope.appl = new Apple();
};

然后:

<div ng-controller="MyController">
   <a href="" ng-click="appl.getInfo()">click</a>
</div>

更详细地说,像传递给 Angular 的 ngClick 的表达式是在 Angular $scope 的上下文中评估的(而不是在它们在 DOM 中位置的上下文中)。您可以查看source of ngClick

【讨论】:

  • 不使用 angularjs 我如何做同样的事情?想象一下,如果我点击一个链接,我想调用一个原型函数。我有点困惑为什么我必须创建一个控制器并将其传递给仅单击事件的范围。
  • 对于您所描述的内容,您根本不需要 Angular JS。但是当您使用ngClick 时,您正在使用它。你可以很容易地使用onclick(参见developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/…),在这种情况下你的代码应该可以正常工作。
  • 我可以在点击超链接时调用 javascript 函数,但不能调用原型函数。这就是问题所在。
  • 你所说的“函数”太含糊了。您的问题需要更多上下文。 Plunker 将是一个好的开始。
  • @user3501278 你可能不熟悉范围是什么。您的 appl 变量仅在 document.ready 函数中可用,因为您在那里声明了它。所以 appl 在 document.ready 函数中的作用域。新手程序员会将所有内容放在 glocal 范围内 window.appl = ... 但最好不要将任何内容放在 glocal 范围内(应用程序的根名称空间除外)。 en.wikipedia.org/wiki/Scope_%28computer_science%29
猜你喜欢
  • 2015-10-10
  • 1970-01-01
  • 2014-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-06
  • 1970-01-01
相关资源
最近更新 更多