2013-06-06 30 views
6

AngularJSに移動すると、下の// ERROR行でJavaScriptエラーが発生します。未定義メンバーのプロパティを設定できません

なぜCannot set property 'show' of undefinedが届きますか?

<html ng-app> 
<body> 

    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.1/angular.min.js"> 
     </script> 

    <div ng-controller='DeathrayMenuController'> 
     <button ng-click='toggleMenu()'>Toggle Menu</button> 
     <ul ng-show='menuState.show'> 
      <li ng-click='stun()'>Stun</li> 
      <li ng-click='disintegrate()'>Disintegrate</li> 
      <li ng-click='erase()'>Erase from history</li> 
     </ul> 
    <div/> 

    <script> 
    function DeathrayMenuController($scope) { 
     $scope.menuState.show = false;  // ERROR HERE 

     $scope.toggleMenu = function() { 
      $scope.menuState.show = !$scope.menuState.show; 
     }; 
    } 
    </script> 
</body> 
</html> 

答えて

10

$scope.menuStateは決して定義しません。代わりに、次の点を考慮してください:

<html ng-app> 
    <body> 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.1/angular.min.js"></script> 
    <div ng-controller='DeathrayMenuController'> 
     <button ng-click='toggleMenu()'>Toggle Menu</button> 
     <ul ng-show='menuState_show'> 
     <li ng-click='stun()'>Stun</li> 
     <li ng-click='disintegrate()'>Disintegrate</li> 
     <li ng-click='erase()'>Erase from history</li> 
     </ul> 
    <div/> 

    <script> 
    function DeathrayMenuController($scope) { 
     $scope.menuState_show = false; 
     $scope.toggleMenu = function() { 
     $scope.menuState_show = !$scope.menuState_show; 
     }; 
    } 
    </script> 
    </body> 
</html> 
9

同じ本を使い、この問題に遭遇しました。私は、次のようにうまく機能することを追加しようと思いました:

<html ng-app> 
<body> 

    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.1/angular.min.js"> 
     </script> 

    <div ng-controller='DeathrayMenuController'> 
     <button ng-click='toggleMenu()'>Toggle Menu</button> 
     <ul ng-show='menuState.show'> 
      <li ng-click='stun()'>Stun</li> 
      <li ng-click='disintegrate()'>Disintegrate</li> 
      <li ng-click='erase()'>Erase from history</li> 
     </ul> 
    <div/> 

    <script> 
    function DeathrayMenuController($scope) { 
     $scope.menuState = {show: false};  // ERROR HERE 

     $scope.toggleMenu = function() { 
      $scope.menuState.show = !$scope.menuState.show; 
     }; 
    } 
    </script> 
</body> 
</html> 
+2

はちょうどこの同じ問題に出くわしました。最初の答えが実際にはっきりしないというあいまいさは、ちょうどアンダーラインを使用していたのですが、そうすることでスコープオブジェクトの下に変数が作成されましたが、ドット演算子は宣言されていない変数を設定していました。この答えは、後者の状況を整理することをより適切に反映するように思われた。ありがとう – tsurantino

6

エラッタは、補正を示しています。読みながらhttp://oreilly.com/catalog/errata.csp?isbn=0636920028055

$scope.menuState.show = false; will give an undefined error 

Added $scope.menuState = {} before to fix the issue i.e. 

function DeathrayMenuController($scope) { 
    $scope.menuState = {} 
    $scope.menuState.show = false; 
... 
+0

リンクを共有してくれてありがとう。私は問題を解決しています(これまでほとんどすべてのページがありました)。それは良い本ですが、それは多くの間違いを含んでいます。 –

関連する問題