2014-09-02 49 views
0

我是angularjs的新手。我試圖顯示一個html元素,取決於$ scope對象的屬性,但不使用任何表單元素。angularjs ns-show邏輯流程

這是在剪斷的代碼:

<div id="ListApp"> 
    <div ng-controller="ListCtrl"> 
     {{ myData.prova }}: {{ myData.logged }} 
     <div id="secretContent" ng-show="myData.logged"> 
      <ul> 
      <li ng-repeat="elemento in lista"> 
       <input type="checkbox" ng-model="elemento.comprato" /> 
       <span ng-if="!elemento.comprato">{{ elemento.nome }}</span> 
       <span ng-if="elemento.comprato" style="text-decoration:line-through;">{{ elemento.nome }}</span> 
      </li> 
      </ul> 
      <input type='text' id='input_nome'/><button ng-click="aggiungi()">Aggiungi</button> 
     </div> 
    </div> 
    </div> 

這是控制器部分:

<script> 
    var listaViaggio = angular.module('listApp', ['directive.g+signin']); 
    listaViaggio.controller('ListCtrl', ['$scope',function ListCtrl($scope) { 
    $scope.lista = []; 
    $scope.myData={}; 
    $scope.myData.prova="test"; 
    $scope.myData.logged=0; 
    $scope.aggiungi = function(){ 
    $scope.lista.push({ 
     'nome':document.getElementById("input_nome").value, 
     'comprato':false 
    }); 
    }; 
    $scope.$on('event:google-plus-signin-success', function (event, authResult) {$scope.myData.logged=1;console.log($scope.myData.logged);}); 
    $scope.$on('event:google-plus-signin-failure', function (event, authResult) {$scope.myData.logged=0;console.log($scope.myData.logged);}); 
    }]); 
</script> 

由於可以很容易地看到,我改變$ scope.myData.logged上的狀態谷歌+登錄,我認爲具有ID secretContent的div將顯示或不會顯示取決於此屬性,但我已經看到,ng-show的真實性只評估一次,並沒有綁定到實際值的財產,所以,當它改變時,什麼都不會發生。

我的代碼有什麼問題? ng-show命令的正確邏輯流程以及如何將它綁定到$ scope屬性?

在此先感謝大家。

+1

需要在'$ on'回調中使用'$ scope。$ apply()'。 – 2014-09-02 05:52:03

+0

太棒了,它的工作原理!非常感謝你。只是一個問題:爲什麼雙向數據綁定在這種情況下不起作用? – luca3003 2014-09-02 19:44:03

回答

1

使用$ scope。$ apply(),只要值被更改。

$ scope。$ apply()將更新頁面內容。

+0

雖然這個工程這是醜陋的馬車 – astroanu 2014-09-02 06:24:36

+0

嗨天文,你到底是什麼意思?這對你來說是最好的方式?我是一個新手,每個貢獻是高度讚賞。謝謝。 – luca3003 2014-09-02 19:55:44