0

我有一些 html 元素,它们被隐藏使用ng-hide

<ion-list>
        <ion-item class="ng-hide" ng-show="isLoggedin()" ng-click="login()">Login</ion-item>
        <ion-item class="ng-hide" ng-show="isLoggedin()" href="#/app/register">Register</ion-item>
</ion-list>

在控制器中我有一个异步功能,当它解决时我想显示这些链接

$scope.isLoggedin = function(){
    $scope.$on('some_function', function () {
        //this will resolve at some point
        return true;
    });
};

这个想法是当isLoggedin()返回 true 时,ng-show也将设置为 true。

我没有设置 using ng-show="isLoggedin()",可能是其他解决方案,只要它使用:

$scope.$on('some_function', function () {
    //this will resolve at some point
});

我可以设置一些id's并抓取元素并更改控制器中的类,但我在想是否有办法观察解析并让元素知道显示

有任何想法吗?

4

2 回答 2

3

您的代码对我来说看起来非常难以理解。例如,从事件观察者返回 true 根本不会做任何事情,AFAIK。另外,在同一个元素上class="ng-hide"使用时不要手动设置。ng-show

无论如何,如果我理解正确,您只需要创建一个布尔属性并在异步操作完成后设置它:

$scope.$on('someEvent', function () {
    $scope.isLoadingFinished = true;
});

&

<item ng-show="isLoadingFinished">...</item>
于 2014-11-21T08:14:35.133 回答
1

而不是使用函数isLoggedIn()尝试使用范围变量,就像这样

$scope.isLogged = false;
...
$scope.$on(....)
  $scope.isLogged = true;
....

并将您的 html 更改为

<ion-list>
    <ion-item ng-if="isLogged" ng-click="login()">Login</ion-item>
    <ion-item ng-if="!isLogged" href="#/app/register">Register</ion-item>
</ion-list>
于 2014-11-21T08:14:53.713 回答