как узнать кто звонил контролеру - PullRequest
1 голос
/ 19 января 2020

У меня есть файл с различным типом кода для разных целей. и я хочу, чтобы они вызывались, когда controllerAs имеет заданное значение c. Я пробовал много предыдущих ответов, но большинство из них для контроллера, но я хочу знать значение контроллера как. так как я могу узнать значение controllerAs и как его использовать в условии if ??

var challenge_page = {
        name: "web.challenge-main.challenge-page",
        parent: "web.challenge-main",
        url: "/challenge-page/:challengeId",
        templateUrl: baseUrl + "/web/challenge/challenge-page.html",
        controller: 'ChallengeCtrl',
        controllerAs: 'challenge',
        redirectTo: "web.challenge-main.challenge-page.overview",

    var participate = {
        name: "web.challenge-main.challenge-page.participate",
        parent: "web.challenge-main.challenge-page",
        url: "/participate",
        templateUrl: baseUrl + "/web/challenge/participate.html",
        controller: 'ChallengeCtrl',
        controllerAs: 'participate',
        title: 'Participate',
    };

В приведенном выше блоке кода у меня есть файл директивы на двух страницах. который вызывает тот же контроллер.

1 Ответ

1 голос
/ 19 января 2020

$state.current предоставит вам информацию о текущем состоянии. Вы можете использовать $state.current.name или $state.current.title или any unique attribute specific to the state... для идентификации текущей страницы внутри контроллера.

angular.module('app', ['ui.router'])
  .config(function($stateProvider, $urlRouterProvider) {
  
    const challenge_page = {
      name: "challenge-page",
      url: "/challenge-page/:challengeId",
      templateUrl: "/web/challenge/challenge-page.html",
      controller: 'ChallengeCtrl',
      controllerAs: 'challenge',
      title: 'Challenge'
    };

    const participate = {
      name: "participate",
      parent: "challenge-page",
      url: "/participate",
      templateUrl: "/web/challenge/participate.html",
      controller: 'ChallengeCtrl',
      controllerAs: 'participate',
      title: 'Participate'
    };

    $urlRouterProvider.otherwise('/challenge-page/1');

    $stateProvider
    .state(challenge_page)
   	.state(participate);
  })
  .run(function($templateCache) {
  	$templateCache.put("/web/challenge/challenge-page.html", `
    	<h1>ChallengePage</h1> 
    	<ul>
      	<li><strong>State Name: </strong>{{challenge.currentState.name}}</li>
       	<li><strong>Title: </strong>{{challenge.currentState.title}}</li>
      </ul>
      <hr />
    	<blockquote>
      	<ui-view></ui-view>
      </blockquote>
    `);
  	$templateCache.put("/web/challenge/participate.html", `
    	<h1>Participate</h1> 
    	<ul>
      	<li><strong>State Name: </strong>{{participate.currentState.name}}</li>
       	<li><strong>Title: </strong>{{participate.currentState.title}}</li>
      </ul>
    `);
    })
  .controller('ChallengeCtrl', function($state) {
  	this.currentState = $state.current;
  });
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-router/1.0.24/angular-ui-router.min.js"></script>
<div ng-app="app">
  <a ui-sref="challenge-page({challengeId: 1})" ui-sref-active="active">Challenge</a>
  <a ui-sref="participate" ui-sref-active="active">Participage</a>

  <ui-view></ui-view>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...