我是Stackoverflow的常规消费者。它是一个非常宝贵的工具 - 感谢所有的帮助!
但这是我的第一个问题:我对Angular很新,但是我已经为驴子做了服务器方面的事情。
我在控制器上有一个方法,它调用服务器REST服务。我的问题是每当实例化控制器时都会调用该方法。我知道这是另一种声明功能的方式,但我不知道要搜索什么。
这是我的HTML:
<html lang="en" data-ng-app="mLS" ng-controller="mLSController">
<head>....</head>
...
<li><a ng-if="userName" ng-click="Logout()">logout</a></li>
和我的模块(模块def在别处,但似乎没问题)
var app = angular.module('mLS');
app.controller('mLSController', function ($scope, $http, $window, $location) {
$http({
url: '/api/UI/GetUsername',
method: 'GET'
}).success(function (data, status, headers, config) {
$scope.userName = data;
$scope.desiredPath = $location.path();
if (!$scope.userName && $scope.desiredPath != '/Account/Login')
$window.location.href = '/Account/Login';
});
});
function Logout($http) {
$http({ url: '/api/UI/Logout', method: 'GET' });
}
//app.
// controller('mLSController', function ($scope, $http) {
// $scope.Logout = function () {
// $http({ url: 'api/UI/Logout', method: 'GET' });
// };
// });
//app.
// controller('mLSController', ['$scope', '$http', 'Logout', function ($scope, $http, Logout) {
// $scope.callLogout = function () {
// Logout();
// };
// }]).
// factory('Logout', ['$http', function (protocol) {
// protocol({ url: 'api/UI/Logout', method: 'GET' }).success(function() {
// $scope.Logout = true; });
// }]);
所以我的问题是当前的代码:
function Logout($http) {
$http({ url: '/api/UI/Logout', method: 'GET' });
}
根本就没有被调用,如果我将它放在控制器上,则在实例化控制器时调用Logout()
。哪个不理想。
请帮忙!
答案 0 :(得分:0)
如果你希望Logout函数暴露给DOM(通过Angular),你需要把它放在$ scope上。没有其他选项可以使用angular指令(ng-click)来调用它。
否则,如果您希望在实例化app / controller之前调用它,请使用本机javascript的onclick()事件。
警告:如果使用onclick,则无法设置$ scope variables。
答案 1 :(得分:0)
所以,多亏巴拉特,我已经开始工作了!
这是解决方案:
var app = angular.module('mLS');
app.controller('mLSController',
// function added to the controller
function ($scope, $http, $window, $location) {
$scope.Logout = function () {
$http({ url: 'api/UI/Logout', method: 'GET' });
return ;
};
$http({ url: '/api/UI/GetUsername', method: 'GET' }).success(function (data, status, headers, config) {
$scope.userName = data;
$scope.desiredPath = $location.path();
if (!$scope.userName && $scope.desiredPath != '/Account/Login')
$window.location.href = '/Account/Login';
});
});
为了完整性,我可以在函数中包装GetUsername调用,但是问题得到了解答。
我无法回答你的回答,Bharat,因为我还没有提出足够的问题,但非常感谢!