Pytanie Sprawdź, czy obiekt ma właściwość [duplikat]


To pytanie już zawiera odpowiedź:

Jak mogę sprawdzić, czy obiekt ma określoną właściwość w AngularJS?


19
2017-12-09 06:51


pochodzenie


Jeśli nie znasz nazwy właściwości, możesz po prostu sprawdzić Object.keys (objName) .length. Mam nadzieję, że to pomoże. - Virendra Singh Rathore


Odpowiedzi:


Możesz użyć "hasOwnProperty"aby sprawdzić, czy obiekt ma konkretny   własność.

if($scope.test.hasOwnProperty('bye')){
  // do this   
}else{
  // do this then
}

Tutaj jest próbny w jsFiddle.

Mam nadzieję, że to pomocne.


31
2017-12-09 07:07



przechodzę obiekt przez dyrektywę (z '=') iw moim kontrolerze dyrektyw mam ten fragment kodu do inicjalizacji, ale otrzymuję TypeError: Can not call method 'hasOwnProperty' of undefined. wiesz dlaczego? - Daniel R
@ user2985439: Wygląda na to, że twój obiekt nie ma właściwości test. - Felix Kling
@ user2985439 Jak wspomniał Felix Kling, obiekt, do którego odnosi się twoja dyrektywa, nie ma właściwości "test". Czy mógłbyś zaktualizować swoje pytanie, aby uzyskać więcej informacji? - Chickenrice
scope: {test: '='}, controller ($ scope) {if ($ scope.test.hasOwnProperty ('bye')) {// rób rzeczy}} to zwraca błąd typu. Wiem, że test jest zdefiniowany, ponieważ przekazuję go w widoku ... - Daniel R
OK, zaktualizowałem moje pytanie. - Daniel R


if('bye' in $scope.test) {}
else {}

1
2017-12-09 07:10





Problem polega na tym, że prawdopodobnie będziesz miał wartość nie tylko podczas łączenia swojej dyrektywy - może być na przykład ładowany przez $ http.

Moja rada byłaby:

controller: function($scope) {
  $scope.$watch('test.hello', function(nv){ 
     if (!nv) return; 
     // nv has the value of test.hello. You can do whatever you want and this code
     // would be called each time value of 'hello' change
  });
}

lub jeśli wiesz, że wartość jest przypisana tylko jeden:

controller: function($scope) {
  var removeWatcher = $scope.$watch('test.hello', function(nv){ 
     if (!nv) return; 
     // nv has the value of test.hello. You can do whatever you want
     removeWatcher();
  });
}

Ten kod usunie watcher, któremu przypisano wartość "test.hello" (z dowolnego kontrolera, ajaxu itd.)


1
2017-12-09 21:39