【问题标题】:How to select a tab in a $watch function when changing array?更改数组时如何在 $watch 函数中选择选项卡?
【发布时间】:2016-01-28 23:31:15
【问题描述】:

我尝试使用 Angular Material 中的标签来促进日期之间的导航(只需滑动标签来更改日期),我还有一个日期选择器可以快速跳转到另一个日期。

加载工作正常;我用当前日期初始化日期选择器,并在当月的每一天加载标签。

如果我选择另一个月份的日期,我会重新加载选项卡以显示适当的日期。为此,我在日期选择器上添加了一个 $watch。这工作正常,但在 $watch 结束时我设置 tabSelected 谁是要显示的选项卡的索引。那部分不起作用,因为它就像摘要过程没有完成。

我想到了一个解决方案:只需用新值重命名选项卡。但是有没有办法像我一样重置数组并设置索引:

$scope.$watch('dateSelected', function (newValue, oldValue) {
    if ((newValue.getMonth() != oldValue.getMonth())
        || (newValue.getFullYear() != oldValue.getFullYear())) {
        $scope.tabs = initialiseGamesTabs($scope.dateSelected);
    }

    $scope.tabSelected = getTabSelected();
});

【问题讨论】:

    标签: javascript angularjs angular-material


    【解决方案1】:

    变量$scope.dateSelected 本身没有改变,因为改变日期只会改变变量的属性。您必须通过将第三个参数添加到$watch 作为true 来观察变量recursively。

    代码:

    $scope.$watch('dateSelected', function (newValue, oldValue) {
        if ((newValue.getMonth() != oldValue.getMonth())
            || (newValue.getFullYear() != oldValue.getFullYear())) {
            $scope.tabs = initialiseGamesTabs($scope.dateSelected);
        }
    
        $scope.tabSelected = getTabSelected();
    }, true); // <----------- add true here
    

    进一步阅读: $watch an object

    【讨论】:

    • 它不适用于真正的价值。当我更改月份时,tabSelected(索引)设置正确,但显示的选项卡是第一个或最后一个...
    • @JonathanAnctil 如果$watch 检测到更改,则代码有效。许多与tabSeleteted 绑定的html 有问题...
    • 我改变了修改数组的方式,所以现在改为创建一个新数组,我将数据更改为数组。它工作得很好,但现在我遇到了一个问题,我认为原因来自 Material 的 mdTabs...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-05
    相关资源
    最近更新 更多