2015-07-05 4 views
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'; 
        }); 
       } 
      }); 
     } 
    }); 
} 

ответ

1

Ваша цель состоит в том, чтобы поставить часы на groupName, которая лежит внутри каждого из GroupGroups объекта. Таким образом, ваш текущий наблюдатель указывает на 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'; 
        }); 
       } 
      }); 
     } 
    }); 
} 

Примечание

This solution would mess when you will have more than 1000 groups in user.Groups , watcher number will increased and resultant would be app will work slowly.

+0

Спасибо! Я попробовал это, но все равно не повезло. – JD06

+0

@John это дает какие-либо ошибки в консоли? –

+0

Ах да, вот что он говорит: 'TypeError: Не удается прочитать свойство 'Спекуляции' неопределенной в Object.eval [как Fn] (Eval в (https://ajax.googleapis.com/ajax/ libs/jquery/2.1.0/jquery.min.js: 2: 2533), : 9: 35) at h. $ digest (https://ajax.googleapis.com/ajax/libs/angularjs/1.2. 15/angular.min.js: 106: 71) at h. $ Apply (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js:108:370) ' – JD06