Javascript 在本指令中,为什么ng click只处理函数而不是赋值?

Javascript 在本指令中,为什么ng click只处理函数而不是赋值?,javascript,angularjs,angularjs-ng-click,Javascript,Angularjs,Angularjs Ng Click,我试图创建一个基于对象数组的表,通过单击标题进行排序。我对排序功能的这种实现有一个疑问 let myDirectiveTemplate = ` <table class="directiveTable"> <thead> <th ng-repeat="(key,val) in tableObjectArray[0] track by $index"> <a href="" ng-click="changeCriteria(key)

我试图创建一个基于对象数组的表,通过单击标题进行排序。我对排序功能的这种实现有一个疑问

let myDirectiveTemplate = `
<table class="directiveTable">
  <thead>
    <th ng-repeat="(key,val) in tableObjectArray[0] track by $index">
      <a href="" ng-click="changeCriteria(key)">
        {{key}}
      </a>
    </th>
  </thead>
  <tbody>
    <tr ng-repeat="object in tableObjectArray | orderBy:criteria track by $index">
      <td ng-repeat="prop in object track by $index">
        {{prop}}
      </td>
    </tr>
  </tbody>
</table>
`

let app2 = angular.module('myDirectiveModule', []);

let myDirective = () => {
  return {
    restrict: 'E',
    scope: {
      tableObjectArray: '=objects',
    },
    controller: myDirectiveController,
    template: myDirectiveTemplate,
  }
};

let myDirectiveController = ($scope) => {
$scope.changeCriteria = criteria => {
  $scope.criteria = criteria;
}
};

app2.directive('myDirective', myDirective);
app2.controller('myDirectiveController', myDirectiveController);

它似乎什么也没做。即使只是用双大括号显示变量,它也不会在单击时更改。我以前在ng click中使用过变量赋值;发生了什么?

因为
ng repeat
为每个项目创建了一个子范围,所以您只在该子范围内更改原语。由于没有原语的继承,控制器中的父作用域保持不变

若要使用在控制器中声明的对象,或者使用ControllerAs别名,由于继承的原因,它可以正常工作

$scope.myModel ={criteria: 'defaultValue'}

ng-click="myModel.criteria = key"
<tr ng-repeat="object in tableObjectArray | orderBy:myModel.criteria track by $index">
$scope.myModel={criteria:'defaultValue'}
ng单击=“myModel.criteria=key”

从调试和测试的角度来看,使用函数通常是首选的

无论我听到多少次“不要绑定到原语”和“你需要一个点”,我都必须亲自去看。谢谢我实际上已经尝试过点画它,但并没有首先在我的控制器中声明它。哦!还有助于了解子作用域在内部的创建位置
ng如果
ng include
是另外两种吸引人的方法,那么如果你改用
ControllerAs
方法学,这样的问题就会消失,因为大多数东西都必须有一个点。谢谢,我刚刚开始研究角度样式指南,这是我必须纳入的下一个变化之一。
$scope.myModel ={criteria: 'defaultValue'}

ng-click="myModel.criteria = key"
<tr ng-repeat="object in tableObjectArray | orderBy:myModel.criteria track by $index">