2016-09-05 20 views
0

私は定期的にアドバイスを受ける消費者です。それは非常に貴重なツールです - すべての助けをありがとう!角度メソッドを定義する方法

しかし、これは私の最初の質問です。私はAngularの新機能ですが、ロバの年のサーバーサイドの作業を行っています。

私はサーバーのRESTサービスを呼び出すコントローラ上にメソッドを持っています。私の問題は、コントローラがインスタンス化されるたびにこのメソッドが呼び出されることです。私は関数を宣言する別の方法が必要であることを知っていますが、私は何を検索するのか分かりません。

ここに私のhtmlです:

function Logout($http) { 
     $http({ url: '/api/UI/Logout', method: 'GET' }); 
} 

<html lang="en" data-ng-app="mLS" ng-controller="mLSController"> 
<head>....</head> 
... 
<li><a ng-if="userName" ng-click="Logout()">logout</a></li> 

、私のモジュール(モジュールDEFは別の場所ですが、それはOKらしい)

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; }); 
// }]); 

だから私の問題は、その現在のコードです

はまったく呼び出されていません。コントローラーに入れた場合は、Logout()が呼び出されますコントローラがインスタンス化されます。それは理想的ではない。

助けてください!

答えて

0

ログアウト機能をDOMに公開するには(Angularを使用)、$ scopeに配置する必要があります。角度指示(ng-click)を使用して呼び出す他のオプションはありません。

これ以外の場合は、アプリケーション/コントローラがインスタンス化される前に呼び出されるようにするには、ネイティブJavaScriptのonclick()イベントを使用します。

警告:onclickを使用すると、$ scope変数を設定できません。

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呼び出しをラップすることができますが、質問は答えています。

まだ十分な質問はしていないので、私は答えをアップアップできませんが、ありがとうございます!

+0

問題はありません:) – Bharat

関連する問題