【问题标题】:AngularJS - $scope itself undefined in Controllers after calling a functionAngularJS - 调用函数后,控制器中的 $scope 本身未定义
【发布时间】:2017-07-13 06:26:34
【问题描述】:

目前我正在做一个为网站提供不同链接的项目(使用 AngularJS 路由)。如果某人不是管理员,则应隐藏其中之一。人员登录和信息(如果他们已登录并且如果他们是管理员)存储在 Cookie 中。所以基本上这就是页面的布局。

<body ng-app="Main">
    <ul>
        <li><a href="#/!" class="active">Send SMS</a></li> //main-view
        <li><a href="#!edit" ng-show="isAdmin">Edit Groups</a></li> //admin-view
        <li><a href="#!logout">Log out</a></li>
   </ul>
<div ng-view></div>

这是 javascript/angularjs 部分:

var app = angular.module('Main', ["ngRoute"]);

        //Controller for the admin-View
        app.controller('adminCtrl', ['$scope', function($scope) 
        {                
            $scope.isAdmin = checkAdmin(); 
            console.log($scope.isAdmin);
             //many calls/functions here ($ajax etc..)
         }]);

        //Controller for the main-View
        app.controller('mainCtrl', ['$scope', function($scope) 
        {
            $scope.isAdmin = checkAdmin(); 
            //many calls/functions here ($ajax etc..)
         }]);

当我运行页面并登录时,我会进入主视图。如果我输出 $scope.isAdmin 的值,我会得到正确的值。但是,如果我尝试在页面上执行某些操作,例如单击按钮(因此调用函数),则控制台输出未定义,并且我收到一条错误消息,提示我无法设置未定义的 isAdmin 属性。

按钮调用示例函数:

$scope.sendSms = function(){
       $.ajax({
            url: 'sendSms.php',
            type: 'POST',
            data: {text: $scope.Text},
            success: function (response) 
            {
                  $scope.Text = "";
                  $scope.showSuccessSend = true;
                  $scope.$apply();               
             },
             error: function () 
             {
                   $scope.showFailSend = true;
             }
        });           
 };

我已经玩了很长时间,尝试使用 $rootScope 等,但范围始终未定义。请帮我找出为什么 $scope “没有保持定义”的问题。 任何帮助深表感谢!

【问题讨论】:

  • 你在哪里定义了 checkAdmin 函数?
  • 在控制器本身中。这是一个进行 ajax 调用并根据响应(来自 ajax)返回 true 或 false 的函数
  • 在你的代码中哪里使用了 ng-controller?
  • 我不是,我为他们提供这样的路由:
  • app.config(function($routeProvider) { $routeProvider .when("/", { templateUrl : "main.php", controller: "mainCtrl" }) ......

标签: javascript angularjs ajax scope


【解决方案1】:

发现错误。控制器在 ajax 调用时重新加载,因为我不小心使用了两次变量名。不过,谢谢大家的时间:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-09
    • 1970-01-01
    • 2015-08-26
    • 1970-01-01
    • 2015-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多