我有以下函数在前端为我排序,在ng-click上调用。参数是一个字符串,参数' asc'传递给vm.sortCases进行升序排序,并进行降序排序,' desc'。
vm.sortCases = function (byValue) {
vm.selectedSorting = byValue;
};
我有一个手表设置如下,它监视vm.selectedSorting,其中包含一个字符串:
$scope.$watch('vm.selectedSorting', filterAndSortingSearch);
回拨手表:
function filterAndSortingSearch(newValue, oldValue) {
if (newValue === oldValue) {
return;
}
fetchData();
}
如果用户点击两次asc,手表只会触发一次(第一次),为什么会这样,即使传递相同的字符串,如何才能让手表回调运行?我想这样,当用户点击两次并且' asc'两次手表射击也是两次,现在还没有发生。我尝试将true作为手表中的第三个参数传递,但这并不起作用。我也试过像这样转换字符串:
vm.sortCases = function (byValue) {
var objForEqualityComparison = {sortOrder: byValue}
vm.selectedSorting = objForEqualityComparison.sortOrder;
};
这就是我最终的目标。我将字符串转换为对象内部并观察对象而不是字符串值:
vm.sortCases = function (byValue) {
vm.selectedSorting = {direction: byValue};
};
答案 0 :(得分:0)
$watch
仅在变量更改值时触发:
$watch(watchExpression, listener, [objectEquality]);
每当watchExpression发生更改时,都会注册要执行的侦听器回调。 [...]只有当前watchExpression的值和之前对watchExpression的调用不相等时才会调用侦听器(初始运行除外,见下文)。
这是设计的 - 变量可以在计算过程中重新设置,但最终是相同的值,此时$watch
不应该触发,因为没有别的东西取决于那个变量的值也会发生变化。
如果您希望每次用户点击按钮时触发操作,则应使用onclick或ng-click。