【发布时间】: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