2016-03-24 4 views
0

なぜ私のアプリケーションが正しく動作していないのですか?欲求が常に表示される場合はAngularJS ng-ifがDIVを表示しない

Fiddle

<div class="fix" ng-if="showAdd()"> 
    <button type="button" class="btn btn-link"> 
    <span class="glyphicon glyphicon-plus"></span> 
    <span class="fix">Aggiungi un Preferito</span> 
    </button> 
    <div class="add"> 
    Aggiungi un Preferito 
    </div> 
</div> 
<div class="edit" ng-if="showEdit()"> 
Modifica 
</div> 
+0

あなたはフィドルでそれを見ることができます。これはコード: \t \t 'function showEdit(){ \t \t \t return $ s cope.startEdit &&!$ scope.startAdd; \t \t ' – paolopolix

+0

ここで、init値は、 '$ scope.startEdit = startEdit'、startEditはどこに定義されていますか? –

+1

関数は値を返さないので、常にfalseになります。 –

答えて

1

あなたのフィドルに間違いがあるようです。次へごshowAddshowEdit方法変更した場合、編集のdivが表示されます:それはどこにも呼び出されないstartAdd機能によって活性化されるため

function showAdd() { 
    return $scope.addBookmark && !$scope.editBookmark; 
} 

function showEdit() { 
    return $scope.editBookmark && !$scope.addBookmark; 
} 

を追加divが追加れることは決してありません。

また、ここにjavascriptコードを掲載してください。そうすれば、何かがあなたのフィドルに起こった場合、この質問はまだ他の人にとって役に立つかもしれません。

EDIT:これに

<div class="fix" ng-if="showAdd()"> 
    <button type="button" class="btn btn-link"> 
    <span class="glyphicon glyphicon-plus"></span> 
    <span class="fix">Aggiungi un Preferito</span> 
    </button> 
    <div class="add"> 
    Aggiungi un Preferito 
    </div> 
</div> 

あなたがこれを変更する必要が動作するようにあなたの追加ボタンを取得するには

<button type="button" class="btn btn-link" ng-click="startAdd()"> 
    <span class="glyphicon glyphicon-plus"></span> 
    <span class="fix">Aggiungi un Preferito</span> 
    </button> 
<div class="fix" ng-if="showAdd()"> 
    <div class="add"> 
    Aggiungi un Preferito 
    </div> 
</div> 
+0

のコードは、編集ボタンで機能しますが、 'view .. – paolopolix

+0

あなたが持っている追加ボタンは実際には 'startAdd'関数を呼び出さないからです。また、 'ng-if'命令の内部にあるので、一度も表示されません。解決策を使って回答を編集します。 – rgvassar

+0

ボタンのクリックではなく、showAdd()を常に表示する必要があります(showEditが非表示の場合)...どうすれば修正できますか? hhmmm – paolopolix

0

:これはこれはフィドル..です 「NG-IF」タグを底にDIVの(一度に)1を示さなければなりませんどちらか一方が、次のようにビューを構築することがベストプラクティスです:

<div class="fix" ng-if="showingAdd"> 
    <button type="button" class="btn btn-link"> 
    <span class="glyphicon glyphicon-plus"></span> 
    <span class="fix">Aggiungi un Preferito</span> 
    </button> 
    <div class="add"> 
    Aggiungi un Preferito 
    </div> 
</div> 
<div class="edit" ng-if="!showingAdd"> 
Modifica 
</div> 
2

問題がshowEdit()機能です。あなたのフィドルから

あなたが持っている:startEditstartAddのように定義されている

function showEdit() { 
     return $scope.startEdit && !$scope.startAdd; 
    } 

は:

function startAdd() { 
     $scope.addBookmark = true; 
     $scope.editBookmark = false; 
    } 


    function startEdit() { 
     $scope.editBookmark = true; 
     $scope.addBookmark = false; 
    } 

をすると、あなたのNG-場合の通話 showEdit()それはしかし $scope.startEdit && !$scope.startAdd;

$scope.startEdit戻りますと$scope.startAddは関数なので、真実になります(つまり、evaluateat eからtrueへのブール式)。したがって、ブール式は常にfalseと評価されます(DIVは非表示のままです)。

は、下記を参照してください:あなたがいずれかの関数を呼び出すまたはブール式を評価すると、概念的に何かが欠けているよう

$scope.startEdit && !$scope.startAdd; 
true && !true 
true && false 
false 

に見えます。

JavaScript関数を呼び出す場合は、ng-if="showEdit()"ブロックと同じように、関数の名前にかっこを付ける必要があります。 、あなたはまだしかし、startEdit()startAdd()としては何も返さない、問題を抱えていると思います

function showEdit() { 
     return $scope.startEdit() && !$scope.startAdd(); 
    } 

$scope.showEdit()startAdd()startEdit()を呼び出すことを意図している場合

は同様に、あなたはこのような何かを行う必要がありますしたがってundefinedと評価されます。

上記のようにshowEdit()関数を編集し、startEdit()startAdd()にブール式を返すと、良い結果が得られます。

関連する問題