【问题标题】:AngularJS needs to execute a function two times to show the resultsAngularJS 需要执行两次函数才能显示结果
【发布时间】:2016-12-01 04:54:24
【问题描述】:

我有一个导航栏,它有一个下拉菜单项Log Out,它调用ngPostLogOut() 函数。

在 app.js 中

.when("/logout", {
        controller: 'AuthController',
        templateUrl: "client/html/auth/logout.html"
    });

AuthController

$scope.ngPOSTLogOut = function() {
    if ($rootScope.user) {
        $rootScope.user = null;
    }
    if ($window.sessionStorage) {
        $window.sessionStorage.clear();
        alert('Entered..');
    }
    alert('Before HTTP');
    $http.post('server/auth/logout.php')
        .then(function(result) {
            $scope.logout = result.data;
        });
    alert('After HTTP');
    /*
    $timeout(function() {
        $location.path('/');
    }, 10000);
    */
};

logout.html

<div ng-controller="AuthController as auth">
<p ng-show='user == null' class="text-center">{{logout}}</p>
<br>
<button ng-click='ngPOSTLogOut()' class="btn btn-default btn-block">Angular To PHP</button>

现在,如果有人从导航栏中的下拉菜单中单击 Log Out 项,则调用该函数。我知道这一点,因为我已经设置了警报并且它们确实会弹出。但是,login.php 中的“回声”没有得到推荐。但是,奇怪的是,如果我按下也调用ngPostLogOut() 函数的Angular to PHP 按钮,则该函数会按预期完美完成。

我的猜测

我的猜测是 ngRoute 强制 Angular 优先考虑 HTML 模板开关,从而使 ngPOSTLogOut() 函数的参数被忽略或解除。

GitHub上的整个项目

https://github.com/AquaSolid/RAMA_Angular_PHP

【问题讨论】:

    标签: javascript html angularjs ngroute


    【解决方案1】:

    改变这个:

    <li ng-click='ngPOSTLogOut()' ng-show='user != null'><a href="#logout">Log Out</a></li>
    

    到这里:

    <li ng-show="user != null"><a ng-click="ngPOSTLogOut()">Log Out</a></li>
    

    并考虑使用 ng-if 而不是 ng-show。

    【讨论】:

    • 我会说你的建议效果更好,但现在logout.html 甚至没有显示。我希望它显示,从 PHP 接收 echo 并显示它 {{logout}}
    • 那么为什么不在promise完成后直接重定向到注销页面呢? $scope.logout = 结果.数据; $location.path('#logout/');或类似的东西。
    • 我试过了,它显示 HTML,但主要问题仍然存在。 $http.post 仍然没有出现在 {{logout}} 中。它仅在手动单击Angular to PHP 按钮时出现。
    • 通常你的后端甚至不应该将这种消息发送到负责生成和显示它的前端。后端应该只发送 HTTP 状态代码和/或数据库数据。所以你应该把 {{logout}} 改成“You are now logged out”,并从 PHP 中移除这些回显,200 个 HTTP 状态就足够了
    • 啊哈!这就说得通了。我将代码更改为使用.success.error 函数的$http.get 函数,但同样的问题仍然存在,前端数据没有更新,现在'您已成功注销'来了来自 AngularJS,但同样,只有当按钮 Angular to PHP 被点击时..
    猜你喜欢
    • 2016-04-14
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    • 2018-01-08
    • 1970-01-01
    • 1970-01-01
    • 2018-06-29
    • 2020-11-23
    相关资源
    最近更新 更多