2017-06-28 18 views
1

これはフォームです。ng-showディレクティブが機能しないのはなぜですか?

<div class="row" ng-controller="contactsCtrl"> 

<form ng-show="addFormShow"> 
    <h3>Add Contact</h3> 
    <!-- Add form --> 
    <div class="row"> 
     <div class="large-6 columns"> 
      <label>Name: 
       <input type="text" ng-model="name" placeholder="Contact Name" required /> 
      </label> 
     </div> 
     <div class="large-6 columns"> 
      <label>Email: 
       <input type="text" ng-model="email" placeholder="Contact Email" required /> 
      </label> 
     </div> 
    </div> 
    <div class="row"> 
     <div class="large-6 columns"> 
      <label>Company: 
       <input type="text" ng-model="company" placeholder="Company Name" required /> 
      </label> 
     </div> 
     <div class="large-6 columns"> 
      <label>Work Phone: 
       <input type="text" ng-model="work_phone" placeholder="Work Phone" required /> 
      </label> 
     </div> 
    </div> 
    <div class="row"> 
     <div class="large-6 columns"> 
      <label>Mobile Phone: 
       <input type="text" ng-model="mobile_phone" placeholder="Mobile Phone" required /> 
      </label> 
     </div> 
     <div class="large-6 columns"> 
      <label>Home Phone: 
       <input type="text" ng-model="home_phone" placeholder="Home Phone" required /> 
      </label> 
     </div> 
    </div> 
    <div class="row"> 
     <div class="large-6 columns"> 
      <label>Street Address: 
       <input type="text" ng-model="street_address" placeholder="Street Address" required /> 
      </label> 
     </div> 
     <div class="large-6 columns"> 
      <label>City: 
       <input type="text" ng-model="city" placeholder="City" required /> 
      </label> 
     </div> 
    </div> 
    <div class="row"> 
     <div class="large-6 columns"> 
      <label>State: 
       <input type="text" ng-model="state" placeholder="State" required /> 
      </label> 
     </div> 
     <div class="large-6 columns"> 
      <label>Zip Code: 
       <input type="text" ng-model="zipcode" placeholder="Zip Code" required /> 
      </label> 
     </div> 
    </div> 
    <div class="row"> 
     <div class="large-12 columns"> 
      <input type="submit" value="Add Contact" class="button" /> 
     </div> 
    </div> 
</form> 

<div class="large-10 columns"> 
    <h3>Your Contacts (3)</h3> 
    <table> 
     <thead> 
      <tr> 
       <th width="200px">Name</th> 
       <th width="200px">Company</th> 
       <th width="25%">Email</th> 
       <th width="25%">Actions</th> 
      </tr> 
     </thead> 
     <tbody> 
      <tr ng-repeat="contact in contacts"> 
       <td><a href="#">{{contact.name}}</a></td> 
       <td>{{contact.company}}</td> 
       <td>{{contact.email}}</td> 
       <td><a class="button tiny" ng-click="showEditForm(contact)">Edit</a> 
        <a class="button tiny alert" ng-click="removeContact(contact)">Delete</a></td> 
      </tr> 
     </tbody> 
    </table> 
</div> 
<div class="small-12 large-2 columns"> 
    <a class="button large" ng-click="showAddForm()">+</a> 
</div> 
</div> 

これはコントローラです。

'use strict'; 

angular.module('myContacts.contacts', ['ngRoute','firebase']) 

.config(['$routeProvider', function($routeProvider) { 
    $routeProvider.when('/contacts', { 
    templateUrl: 'contacts/contacts.html', 
    controller: 'contactsCtrl' 
    }); 
}]) 

.controller('contactsCtrl', ['$scope', '$firebaseArray', function($scope,$firebaseArray) { 
    var ref = new Firebase('https://mycontacts-1bb2d.firebaseio.com/contacts'); 

    $scope.contacts = $firebaseArray(ref); 
    $scope.showAddForm = function(){ 
     $scope.addFormShow = true; 
    } 
}]); 

これはかなり簡単なコードです。ユーザーが '+'ボタンをクリックしたときのフォームを表示するはずです。しかし、なぜng-showディレクティブが機能していないのか理解できません。

+0

次のコード参照してください:私はあなたがその機能を交換することをお勧めhttps://plnkr.co/edit/lftU1bPhL2kyWibjZQX6?p=preview –

+0

を(と(あなたの問題に関係していなくても)一般的な改善と同じように、あなたの 'ng-click 'で簡単な否定式で呼び出すことができます。 例: '' もちろん、フォームを表示して非表示にすることを唯一の目的としている場合、 'addFormShow = true'を'ng-click'。 –

答えて

0

コードでうまく動作し、コードにng-controllerが正しく追加されているかどうかを確認してください。

DEMO

var myApp = angular.module('ReqWebApp', []) 
 

 
myApp.controller('contactsCtrl', function contactsCtrl($scope) { 
 
$scope.showAddForm = function(){ 
 
    $scope.addFormShow = true; 
 
} 
 
});
<!DOCTYPE html> 
 
<html ng-app="ReqWebApp"> 
 

 
<head> 
 
    <meta charset="UTF-8"> 
 
    <title>New Request</title> 
 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
</head> 
 

 
<body ng-controller="contactsCtrl"> 
 
    <form ng-show="addFormShow"> 
 
<h3>Add Contact</h3> 
 
<!-- Add form --> 
 
<div class="row"> 
 
    <div class="large-6 columns"> 
 
     <label>Name: 
 
      <input type="text" ng-model="name" placeholder="Contact Name" required /> 
 
     </label> 
 
    </div> 
 
    <div class="large-6 columns"> 
 
     <label>Email: 
 
      <input type="text" ng-model="email" placeholder="Contact Email" required /> 
 
     </label> 
 
    </div> 
 
</div> 
 
<div class="row"> 
 
    <div class="large-12 columns"> 
 
     <input type="submit" value="Add Contact" class="button" /> 
 
    </div> 
 
</div> 
 
</form> 
 
<div class="small-12 large-2 columns"> 
 
    <a class="button large" ng-click="showAddForm()">+</a> 
 
</div> 
 
</body> 
 

 
</html>

+1

この質問は、コントローラーが記載されていないか、コメントセクションにないかどうかを確認する必要があります。これは最初に答えとして投稿するのではなく、 –

+0

Thanxのアドバイスが必要ですが、コントローラーを正しく追加しました。私のコード全体を投稿すると時間がかかりすぎるでしょう。私はfirebaseを扱うのでコードのいくつかを省略しましたが、私はこれが大丈夫だと思いました。 –

-1

コードは私のために正常に動作します。私はあなたがコントローラを追加する際に若干の誤差があったかもしれないと思います。あなたのコード細かいチェックにこのplunker取り組んでいる他のいくつかの問題かもしれない

<html ng-app='FormApp'> 
<head> 
</head> 
<body ng-controller='contactsCtrl'> 
<form ng-show="addFormShow"> 
    <h3>Add Contact</h3> 
    <!-- Add form --> 
    <div class="row"> 
     <div class="large-6 columns"> 
      <label>Name: 
     <input type="text" ng-model="name" placeholder="Contact Name" required /> 
    </label> 
     </div> 
     <div class="large-6 columns"> 
      <label>Email: 
     <input type="text" ng-model="email" placeholder="Contact Email" required /> 
    </label> 
     </div> 
    </div> 
    <div class="row"> 
     <div class="large-12 columns"> 
      <input type="submit" value="Add Contact" class="button" /> 
     </div> 
    </div> 
</form> 
<div class="small-12 large-2 columns"> 
    <a class="button large" ng-click="showAddForm()">+</a> 
</div> 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"> 
</script> 
<script> 
    angular.module('FormApp', []).controller('contactsCtrl', ['$scope', function($scope) { 

     $scope.showAddForm = function() { 
      $scope.addFormShow = true; 
     } 
    }]); 
</script> 
</body> 
</html> 
+0

私はコントローラを追加しました。私はちょうど私の問題に関連していないfirebaseを扱うので、いくつかのコードを省略しました。更新されたコードを確認してください。 –

+0

「+」をクリックするとコンソールにエラーが表示されますか? – Vipin

+0

いいえ、「+」ボタンをクリックする前からフォームが表示されています。 –

関連する問題