标签: angularjs-routing

使用 ASP.NET MVC 5 登录后重定向到 Angular 路由

我正在使用 asp.net mvc 5 应用程序日志记录,并在 AccountController 中执行以下日志操作:

    // POST: /Account/Login
    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
    {

          ## not working, just a trial
        ##returnUrl = "Dashboard#!/requests";

        if (!ModelState.IsValid)
        {
            return View(model);
        }

        // This doesn't count login failures towards account lockout
        // To enable password failures to trigger account lockout, change >to shouldLockout: true

        var result = await > >SignInManager.PasswordSignInAsync(model.UserName, model.Password,
Run Code Online (Sandbox Code Playgroud)

model.RememberMe, shouldLockout: false);

        switch (result)
        {
            case SignInStatus.Success:
                return RedirectToLocal(returnUrl);
            case SignInStatus.LockedOut:
                return View("Lockout");
            case …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc-routing angularjs angularjs-routing asp.net-mvc-5

5
推荐指数
1
解决办法
4169
查看次数

当直接转到URL时,AngularJS路径中的参数路径未在HTML5模式下加载

我指定了几条路线:

app.config(["$routeProvider", "$locationProvider", function($routeProvider, $locationProvider) {
    $routeProvider.
    when("/", {
        templateUrl: "/ajax/home.html",
        controller: "HomeController"
    }).
    when("/test/:id", {
        templateUrl: "/ajax/test.html",
        controller: "TestController",
        resolve: {
            data: function ($q, $http, $route) {
                var deferred = $q.defer();
                var params = $route.current.params;

                $http({method: "GET", url: "/api/test/" + params.id + ".json"})
                    .success(function(data) {
                        deferred.resolve(data)
                    })
                    .error(function(data){
                        deferred.reject();
                    });

                return deferred.promise;
            }
        }
    });

    $locationProvider.html5Mode(true);

}]);
Run Code Online (Sandbox Code Playgroud)

当另一条路线上有链接时/test/x,它可以正常工作.不在HTML5模式下它也可以正常工作.但是,当您直接导航到/test/xHTML5模式时,路由不会加载,并且没有任何解决方案被执行.

我查看了很多AngularJS文档,仍然无法弄清楚这一点.plz :(

编辑:我做了更多测试,这仅适用于包含斜杠的路线.如果有一个参数(如:id),似乎并不重要.转到/hello(如果定义了该路由)适用于HTML5和非HTML5模式中的所有情况.要像/hello/world始终工作在非HTML5模式,在道路被来自另一路由通过单击链接而改变了HTML5模式下工作.打开时刷新/hello/world,转到地址栏并按Enter或从另一个网站点击指向它的链接会导致它重新加载索引页而不是实际路径.

angularjs angularjs-routing

4
推荐指数
1
解决办法
4286
查看次数

AngularJS:不在RouteProvider中而是在Controller中解析?

我在这里看到一些示例代码延迟AngularJS路由更改,直到加载模型以防止闪烁

我马上就知道这是正确的方法,我只需要在完成加载后才能使控制器加载,通常大多数示例都会告诉您将routeprovder中的代码解析为内联函数,但这听起来不对.控制器需要它,所以为什么不让控制器实现要解决的功能.这听起来就像我在寻找的那样.这似乎使用了原型模式??

function PhoneListCtrl($scope, phones) {
  $scope.phones = phones;
  $scope.orderProp = 'age';
}

PhoneListCtrl.resolve = {
  phones: function(Phone, $q) {
    // see: https://groups.google.com/forum/?fromgroups=#!topic/angular/DGf7yyD4Oc4
    var deferred = $q.defer();
    Phone.query(function(successData) {
            deferred.resolve(successData); 
    }, function(errorData) {
            deferred.reject(); // you could optionally pass error data here
    });
    return deferred.promise;
  }
}
Run Code Online (Sandbox Code Playgroud)

问题是我的控制器是这样的

'use strict';

angular.module('TestApp')
  .controller('ItemsCtrl', function ($scope) {
});
Run Code Online (Sandbox Code Playgroud)

那么当我的控制器在模块内声明时,如何在控制器上应用新功能?

我真正需要的是类似的东西

 TestCtrl.resolve = {
      items: function( $q) {
          ..........
        return deferred.promise;
      }
    }
Run Code Online (Sandbox Code Playgroud)

然后这将允许我在我的routeprovider ..

  when('/items', {
    templateUrl: 'views/items.html', 
    controller: 'TestCtrl', 
    resolve: …
Run Code Online (Sandbox Code Playgroud)

angularjs angularjs-scope angularjs-routing

4
推荐指数
1
解决办法
7043
查看次数

AngularJS滚动到元素可防止浏览器跳转

我写了一个包含块列表的应用程序.

每个块包含指向其他块的链接.当点击一个块的链接,例如#/ home/page-19时,该页面根据当前位置向下/向上动画.

这一切目前都有效但是当点击锚点并且路线更新时,浏览器跳到顶部然后动画下来,我需要它从当前位置动画.

我写了一个指令,将preventDefault添加到所有锚点.

请参阅下面的JS小提琴. http://jsfiddle.net/ygNWF/10/

剥离代码:

HTML:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js"></script>

<body ng-app="app" ng-controller="appController">
    <script type="text/ng-template" id="home-template">
       <div class="page" id="page-17" >
              <div class="page-inner" ng-style="style()" resize><a href="#/home/page-18">Page 18</a></div>
          </div>
          <div class="page" id="page-18">
              <div class="page-inner" ng-style="style()" resize><a href="#/home/page-19">Page 19</a></div>
          </div>
          <div class="page" id="page-19">
              <div class="page-inner" ng-style="style()" resize><a href="#/home/page-20">Page 20</a></div>
          </div>
          <div class="page" id="page-20">
              <div class="page-inner" ng-style="style()" resize><a href="#/home/page-17">Page 17</a></div>
          </div>
    </script>

    <div class="wrapper">
      <div class="view" ng-view scroll></div>
    </div>
</body>
Run Code Online (Sandbox Code Playgroud)

JavaScript的:

var app = angular.module('app', []);

/*
  Controllers
*/
app.controller( 'appController', …
Run Code Online (Sandbox Code Playgroud)

jquery angularjs angularjs-directive angularjs-routing

4
推荐指数
1
解决办法
2490
查看次数

通过名字查找angularjs routeprovider的路线

我正在定义这样的路线.

$routeProvider
.when('/Home', {
     name: 'Main',
     templateUrl: 'Main.html',
     controller: 'MainController',
     controllerAs: 'ctrl'
})
.when('/About', {
     name: 'About',
     templateUrl: 'About.html',
     controller: 'AboutController',
     controllerAs: 'ctrl'
})
Run Code Online (Sandbox Code Playgroud)

当我在主控制器中时,如何在控制器中通过查询名称"关于"来查找"/关于"URL?

angularjs angularjs-routing

4
推荐指数
2
解决办法
9716
查看次数

AngularJS路线助手

任何有关如何构建解决方案的想法,有助于以更方便的方式在视图中生成URL,而不是像这样的硬编码:

<a ng-href="#/Book/{{item.bookId}}/ch/{{item.id}}">Chapter {{item.id}}</a>
Run Code Online (Sandbox Code Playgroud)

我想用:

<a chapters="[item.bookId, item.id]">Chapter {{item.id}}</a>
Run Code Online (Sandbox Code Playgroud)

因此它检查路由并为每个路由特定指令生成.

我对尽可能最通用的解决方案感兴趣.

angularjs angularjs-routing

4
推荐指数
1
解决办法
5676
查看次数

AngularJS HTML5模式在手动URL更改时执行整页重新加载



我正在使用AngularJS和ui.router.我已经看到Hashbang和HTML5模式的行为差异,我想知道它是否可以更改/阻止.使用时

$locationProvider.html5Mode(true);
Run Code Online (Sandbox Code Playgroud)

当我手动更改地址栏中的URL时,会发生整页重新加载.例如,如果我目前在网址上

http://example.com/post/5467777
Run Code Online (Sandbox Code Playgroud)

并手动将其更改为

http://example.com/post/5464777
Run Code Online (Sandbox Code Playgroud)

发生拉页重新加载,然后加载正确的状态.

如果我不使用HTML5模式,则不会发生整页重新加载,而是在更改网址时直接加载状态(当然要快得多)

http://example.com/#/post/5467777
Run Code Online (Sandbox Code Playgroud)

到另一个.我对HTML5模式的服务器端配置如下所示:

# Don't rewrite files or directories
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
# Rewrite everything else to index.html to allow html5 state links
RewriteRule ^ index.php [L]
Run Code Online (Sandbox Code Playgroud)

我认为AngularJS也可以拦截这些URL更改.如果可能,在HTML5模式下手动更改URL时,如何才能重新加载页面?

谢谢

apache .htaccess angularjs angularjs-routing angular-ui-router

4
推荐指数
1
解决办法
566
查看次数

控制器在Ionic中被调用两次(AngularJS)

在我的角度项目中,用户接受EULA,然后自动重定向到他们的仪表板,但是,在此重定向上,DashboardController似乎被调用了两次,DashboardController正在路由本身被调用,我已经检查过我是否有意外在模板中再次调用它,但我没有.以下是我的路线和控制器.如果我直接或通过EULA控制器上的重定向访问URL似乎没有关系,我得到相同的结果.

路线

.config(function($httpProvider, $stateProvider, $urlRouterProvider) {

    $httpProvider.interceptors.push('httpRequestInterceptor');

    $urlRouterProvider.otherwise('/');

    $stateProvider

    .state('login', {
        url: '/',
        templateUrl: 'templates/login.html',
        data: {
            requireLogin: false
        }
    })
    .state('eula', {
        url: '/eula',
        templateUrl: 'templates/eula.html',
        data: {
            requireLogin: true
        }
    })
    .state('dashboard', {
        url: '/groups',
        templateUrl: 'templates/dashboard.html',
        data: {
            requireLogin: true
        }
    })
});
Run Code Online (Sandbox Code Playgroud)

控制器:

App.controller('DashboardController', ['$scope', 'RequestService', '$state', '$rootScope', function($scope, RequestService, $state, $rootScope){

alert('test');

}]);
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

根据评论添加我的HTML

的index.html

<body ng-app="App">

<ion-nav-bar class="bar-positive nav-title-slide-ios7" align-title="center">
        <ion-nav-back-button class="button-icon ion-arrow-left-c"></ion-nav-back-button>
    </ion-nav-bar>
    <ion-nav-view class="slide-left-right"></ion-nav-view>
    <ui-view></ui-view>
</body>
Run Code Online (Sandbox Code Playgroud)

dashboard.html

<div class="groups" ng-controller="DashboardController">
    <ion-view …
Run Code Online (Sandbox Code Playgroud)

javascript angularjs angularjs-routing angularjs-controller ionic-framework

4
推荐指数
2
解决办法
6031
查看次数

标题隐藏在我的角度中的特定页面

我正在开展角度项目,我的需求只是登录页面上的隐藏标题块.我试图在登录页面上隐藏标题.但它仍然不适合我.你有没有人帮我在登录状态下隐藏它.

这里是我的索引html

<div ng-include src="'views/header.html'"  ng-hide="$state.current.name === 'login'"></div>

    <div class="">
      <div ui-view></div>
    </div>
Run Code Online (Sandbox Code Playgroud)

在这里我的app.js

var app = angular.module('Qapp', ["ui.router", "ngRoute"])

app.config(function($stateProvider, $urlRouterProvider) {

    //$urlRouterProvider.when('/dam', '/dam/overview');
    $urlRouterProvider.otherwise('/login');

    $stateProvider
      .state('base', {
        abstract: true,
        url: '',
        templateUrl: 'views/base.html'
      })
        .state('login', {
          url: '/login',
          parent: 'base',
          templateUrl: 'views/login.html',
          controller: 'LogCt'
        })
        .state('dam', {
          url: '/dam',
          parent: 'base',
          templateUrl: 'views/dam.html',
          controller: 'DamCt'
        })


  });
Run Code Online (Sandbox Code Playgroud)

javascript angularjs angularjs-routing angular-ui-router

4
推荐指数
1
解决办法
3009
查看次数

控制器启动两次

我有一个简单的控制器(logincontroller),在加载login.html时会启动两次,但我不知道为什么会这样.

MyApp.js:

angular.module('PVM', [
    'Authentication',
    'Modal',
    'ngRoute'
])
.config([
    '$routeProvider', function($routeProvider) {
        $routeProvider
            .when('/Login', {
                controller: 'LoginController',
                templateUrl: 'Login.html'
            })
            .when('/Home', {
                controller: 'ModalController',
                templateUrl: 'Home.html'
            })
            .otherwise({
                redirectTo: '/Login'
            });
    }
]);
Run Code Online (Sandbox Code Playgroud)

LoginController.js:

angular.module("Authentication")
.controller("LoginController",
[
    "$scope", "$rootScope", "$location", "AuthenticationService",
    function($scope, $rootScope, $location, AuthenticationService) {
        AuthenticationService.ClearCredentials();

        $scope.login = function() {

            var foo = "bar"; //Breakpoint hits here twice when loading login.html
        };
    }
    ]);
Run Code Online (Sandbox Code Playgroud)

index.html的:

<!DOCTYPE html>
<html ng-app="PVM">
<head>
<title>My Ang</title>
<link href="Content/bootstrap.min.css" rel="stylesheet" />
<link href="Content/bootstrap-theme.min.css" rel="stylesheet" …
Run Code Online (Sandbox Code Playgroud)

angularjs angularjs-routing angularjs-controller

4
推荐指数
1
解决办法
89
查看次数