为什么 ng-click 在这个指令中只使用一个函数,而不是一个赋值?
Why is ng-click only working with a function, not an assignment, in this directive?
我正在尝试创建一个基于 objects 数组的 table,或者通过单击 headers 创建 table。我对排序功能的实现有疑问。
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-click="criteria = key"
好像什么都没做。即使只是用双花括号显示变量,它也不会在点击时改变。我之前在 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">
从调试和测试的角度来看,通常首选使用函数
我正在尝试创建一个基于 objects 数组的 table,或者通过单击 headers 创建 table。我对排序功能的实现有疑问。
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-click="criteria = key"
好像什么都没做。即使只是用双花括号显示变量,它也不会在点击时改变。我之前在 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">
从调试和测试的角度来看,通常首选使用函数