1

如果用户是我商店网站上“高”组的成员,我正在尝试删除产品 SKU 上的“红色”和“蓝色”下拉列表选项。我想出的代码如下,但仅部分有效;唯一有效的是窗口警报。现在,如果我删除有关查找用户组的逻辑,那么它确实可以工作,但是用户必须设置颜色下拉列表的值才能开始。

function SpecController($scope) {
    angular.forEach($scope.user.Groups, function (g) {
        if (g.Name == "High") {
            alert('You are in the correct group!');
            $scope.$watch('user.Groups.Name', function (val) {
                if (!val) return;
                if (val == "High") {
                    $scope.Variant.Specs.Color.Options = $scope.Variant.Specs.Color.Options.filter(function (item) {
                        return item.Value !== 'Red' && item.Value !== 'Blue';
                    });
                }
            });
        }
    });
}
4

1 回答 1

1

您的目标是放置一个groupName位于每个对象内部Group的手表。Groups所以你当前的观察者指向user.Groups.Name哪个实际上不存在。如果您想让您当前的代码正常工作,那么您可以在放置时使用索引$watch

代码

function SpecController($scope) {
    angular.forEach($scope.user.Groups, function (g,index) { //added index param here
        if (g.Name == "High") {
            alert('You are in the correct group!');
            //used that index param here to put watch on each group.
            $scope.$watch('user.Groups['+ index + '].Name', function (val) { 
                if (!val) return;
                if (val == "High") {
                    $scope.Variant.Specs.Color.Options = $scope.Variant.Specs.Color.Options.filter(function (item) {
                        return item.Value !== 'Red' && item.Value !== 'Blue';
                    });
                }
            });
        }
    });
}

笔记

当您的人数超过 1000groups时 ,此解决方案会变得混乱user.Groups,观察者人数会增加,结果应用程序将运行缓慢。

于 2015-07-05T21:22:36.530 回答