【问题标题】:ng-click and ng-init variable definitionng-click 和 ng-init 变量定义
【发布时间】:2020-04-10 06:00:34
【问题描述】:

我正在尝试使用 ng-click 和 ng-init 使表头排序器工作。

Angular js 文档中的示例需要模块,如果我安装和更新该模块,我的 SPA 会因某种原因而崩溃。我试图让它工作,但即使在其他同事的帮助下,它也失败了。

所以,我想到了绕过,想出了 ng-click 和 ng-init。如果我计算点击次数,那么每偶数点击,表格按升序排序,每奇数点击,表格按降序排序。

我可以使用 (click) 进行一次点击和一次排序(例如,一次点击 - 升序 - 无论我点击多少次都可以完成)。但是,当我使用 ng-click 和 ng-init 时,无法识别 ng-init 中的变量。

<th><button class="some-type" ng-click="count = count + 1; oddEven(count)? sortByAsc(column) : sortByDes(column)" ng-init="count = 0"><b>columnName</b></button></th>

如果我在上述代码中的 columnName 旁边插入 {{ count }}(或代码中的任何有价值的地方),则会出现错误,提示未定义计数。

<th><button class="some-type" ng-click="count = count + 1" ng-init="count = 0"><b>columnName</b></button></th>

我像上面的代码一样在 ng-click 中删除了额外的函数调用,但即使是这个简单的代码也根本无法识别计数。

那么,在 ng-init 和 ng-click 中是否有特定的方法来声明变量?

为什么这段代码不能按原来的方式工作?

【问题讨论】:

标签: javascript angularjs angular angularjs-ng-click angularjs-ng-init


【解决方案1】:

我建议保持一个对象跟踪哪个 col 顺序在 acs 或 des 顺序上,您可以在函数中使用它来调用相应的函数。这是示例代码。

var sortOrder = {
  column1: false,
  column2: false
}

$scope.sortBy = function(col) {
  if(sortOrder[col]) {
    sortByAsc(col)
  } else {
    sortByDes(col)
  }
  sortOrder[col] = !sortOrder[col]
}

【讨论】:

  • 只是想知道 $scope 是干什么用的。我只是在关注其他同事所做的事情,并没有时间深入了解 angularJS 或 JS 的所有细节。所以,如果你能简单地解释一下 $scope 是什么以及我应该如何以及在哪里使用 $scope?
  • 嗯,$scope 是您定义模型和方法的地方,您将在视图中使用它们。就像您在控制器功能中有 sortByAsc 并在视图 html 中使用一样。所以它的作用是当 $scope angular 中的任何变化都会在 html 中呈现这种变化,当你使用 var 或 const 定义变量时,它在 html 中将不可用。
  • 感谢您的解释。我尝试了不同的方法,但它仍然使用 $scope,所以你的解释很有帮助。但是,$scope 是否只适用于 Angular JS 1.x?还是它也适用于 Angular JS 2.x?我刚刚了解到我最有可能使用 Angular JS 2.x,这可能就是为什么即使在使用 $scope 之后属性也无法识别的原因?
  • 嗯,AngularJS 1.x 和 Angular 是完全不同的框架,$scope 在 Angular 中不可用。此外,我们将 Angular 称为 AngularJs x.x 您的语法是 angularjs 而不是 angular,您可以仔细检查您正在使用的框架。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-28
  • 1970-01-01
  • 1970-01-01
  • 2016-03-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多