如何定义角度方法

时间:2016-09-05 14:47:09

标签: function methods controller

我是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()。哪个不理想。

请帮忙!

2 个答案:

答案 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,因为我还没有提出足够的问题,但非常感谢!