标签: angularjs-routing

如何在Angular JS中轻松实现多个布局?

我需要能够为不同的路由指定不同的布局,最好我希望能够在路由配置中的对象中定义布局和其他参数,并让它们在路由更改时传播.

angularjs angularjs-directive angularjs-routing

9
推荐指数
2
解决办法
6992
查看次数

angularjs $ routeProvider路由在resolve完成之前执行

我希望在运行实际路由代码之前触发route.resolve方法.不幸的是,在下面的代码中,prime()被调用,但是它被异步调用,并且在素数完成之前调用路由代码.我认为路由的解决方法是在加载路由之前完成的?

(function () {
'use strict';

var app = angular.module('app');

// Collect the routes
app.constant('routes', getRoutes());

// Configure the routes and route resolvers
app.config(['$routeProvider', 'routes', routeConfigurator]);
function routeConfigurator($routeProvider, routes) {

    routes.forEach(function (r) {
        setRoute(r.url, r.config)

    });

    $routeProvider.otherwise({ redirectTo: '/' });

    function setRoute(url, definition) {
        //set resolvers for all of the routes
        //by extending any existing resolvers (or creating a new one)
        definition.resolve = angular.extend(definition.resolve || {}, {
             prime: prime
        });


        $routeProvider.when(url, definition);
        return $routeProvider;
    }


}

prime.$inject = ['datacontext'];

function …
Run Code Online (Sandbox Code Playgroud)

javascript angularjs angularjs-routing

9
推荐指数
1
解决办法
1054
查看次数

AngularJS和Laravel 4路由冲突在HTML5模式下

我想使用Angularjs从URL中删除#hash $locationProvider.html5Mode(true).

示例:显示地址栏http://localhost/shop而不是http://localhost/#/shop.

一切都运作良好,直到刷新页面.如果我刷新,则会加入以下Laravel路由(在routes.php中定义)

Route::resource('shop', 'ShoppingController')
Run Code Online (Sandbox Code Playgroud)

不是AngularJS路线(在app.js中定义)

$routeProvider.when('/shop', { 
    templateUrl: 'templates/shop.html', 
    controller: 'ShoppingController' 
});
Run Code Online (Sandbox Code Playgroud)

我的代码:

routes.php(Laravel Routes)

Route::get('/', function() {
    return View::make('index'); 
});
Route::resource('shop', 'ShoppingController'); 
Run Code Online (Sandbox Code Playgroud)

app.js(AngularJS路线)

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

app.config(function($routeProvider, $locationProvider) { 
    $routeProvider.when('/shop', {
        templateUrl: 'templates/shop.html', 
        controller: 'ShoppingController'
    });
    $routeProvider.otherwise({ redirectTo: '/' }); 
    $locationProvider.html5Mode(true); 
});
Run Code Online (Sandbox Code Playgroud)

我的目录结构:

Project
    /app 
        /...
        /views
            -index.php (single page application file)
            -routes.php (Laravel routes)
    /public
        /...
        /js
            -angular.js
            -app.js
        -index.php (Laravel index file)
Run Code Online (Sandbox Code Playgroud)

尝试的解决方案:

重写htaccess文件,以便将所有请求重定向到index.php(单页应用程序文件,AngularJS将从该文件中接管路由).问题:通过这种方式,Laravel路由(Route :: resource('shop','ShoppingController'); - 与数据库交互所必需的)变得无法访问AngularJS $ …

.htaccess html5 hashtag angularjs-routing

9
推荐指数
2
解决办法
4837
查看次数

Angular的"controllerAs"在routeProvider中不起作用

我试图controllerAs$routeProvider路线上使用该属性,但没有任何成功.

以下是示例代码:

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

app.config(['$routeProvider', '$locationProvider',
  function($routeProvider) {
  $routeProvider
    .when('/', {
      template:'<div>This should be visible:{{ ctrl.one }}</div><div>This should not:{{ one }}</div>',
      controller: 'Ctrl',
      controllerAs: 'ctrl',
    });
}]);

app.controller('Ctrl', function($scope) {
  $scope.one = 'actual';
});
Run Code Online (Sandbox Code Playgroud)

不确定这是一个错误还是我做错了什么,这是一个展示问题的plnkr

angularjs angularjs-routing

9
推荐指数
1
解决办法
1万
查看次数

如何重定向$ routeProvider.otherwise()保持给定的查询参数

假设我去了/unknown-route?a=hello&b=world并且$routeProvider不认识它并重定向到其他路线:

otherwise({
  redirectTo: '/default-route'
});
Run Code Online (Sandbox Code Playgroud)

是否可以将给定参数传递给重定向路由.

这将是 /default-route?a=hello&b=world

angularjs angularjs-routing

9
推荐指数
1
解决办法
2224
查看次数

9
推荐指数
1
解决办法
5880
查看次数

我们可以在angularJS app.js中一起使用ngRoute和ui.router吗?

以前,我ngRoute在我的主控制器中使用.我必须创建子视图功能,它只能实现UI-Router.请指教?

angularjs angularjs-routing angular-ui-router

9
推荐指数
1
解决办法
2895
查看次数

离子 - 单击后退按钮时,重新加载并以ng-repeat显示新数据

背景

我有一个ng-repeat列表进入详细信息页面(有一个后退按钮).该$scope.items变量是从首次加载页面时出现的get请求加载的,带有我的refreshItems()函数.

问题

单击详细信息页面上的后退按钮时,将返回到正确的页面,但列表不会刷新.我需要刷新此列表,以便加载和显示新项目.

试图解决方案

我以为我可以简单地将Back按钮连接到一个ng-click用来返回的函数,ionicHistory然后调用我的refreshItems()函数; 但是,这不会重新加载第一页上的项目.

上面的尝试确实返回到最后一页触发该refreshItems()函数(并且加载了新数据,我可以通过console.log()语句看到它),但我猜测需要重建ng-repeat.我发现了一些信息$scope.$apply(),以及$route.reload()但是这些都解决了这一问题,当我把他们安置在我结束goBack()功能.

代码摘录

controller.js

$scope.refreshItems = function() {

    console.log("Refreshing items!");

    $http.get('http://domain/page.aspx').then(function(resp) {
        $scope.items = resp.data; console.log('[Items] Success', resp.data);
    }, function(err) { console.error('ERR', err); });

};


$scope.goBack = function() {
    $ionicHistory.goBack();
    $scope.refreshItems();
};
Run Code Online (Sandbox Code Playgroud)

主页HTML

<div class="list">

    <a ng-repeat="i in items" class="item" href="#/tab/details?ID={{i.Item_ID}}">
        <b>Item {{i.Item_Name}}</b>
    </a>

</div>
Run Code Online (Sandbox Code Playgroud)

详细页面上的后退按钮 …

angularjs angularjs-ng-repeat angularjs-routing ionic-framework ionic

9
推荐指数
3
解决办法
2万
查看次数

在$ routeProvider解析中返回相互依赖的异步promise

考虑一下代码:

var myApp = angular.module('myApp', []);
Run Code Online (Sandbox Code Playgroud)

路线:

myApp.config(['$routeProvider', function($routeProvider) {
        $routeProvider.when('/', {
            templateUrl: 'app.html', 
            controller:myAppController, 
            resolve:{
                resolveData:function(Resolver){
                    return Resolver();
                }
            }
        });
    });
Run Code Online (Sandbox Code Playgroud)

解决:

myApp.factory('Resolver', ['$http', function($http){
    return function(){
        return $http({url: '/someurl',method: "GET"}).then(function(data) {

            // dependent call 1
            $http({url: '/someotherurl',method: "GET" }).then(function(data) {

            });

            // dependent call 2
            $http({url: '/someanotherurl',method: "GET" }).then(function(data) {

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

上面我在一个内嵌了2个调用,因为它们依赖于父调用返回的数据.

我想做什么:当所有这些都完成后返回解析器,而不仅仅是父调用.

我不能使用$ q.all(),因为其中2个调用依赖于第一个调用.

简而言之,只有在所有3个调用完成后才能加载myAppController.

promise angularjs angularjs-routing

8
推荐指数
1
解决办法
4310
查看次数

未找到角MINERR_ASSET 404

我收到一个错误记录到控制台:

GET http://localhost:3000/js/lib/angular/MINERR_ASSET 404 (Not Found)     
Run Code Online (Sandbox Code Playgroud)

我看到了这篇文章,它说这是不包含ngRoute模块的结果,但我做到了!

公共/ JS/app.js:

window.app = angular.module('mean-blog-seed', ['ngCookies', 'ngResource',     'ui.bootstrap', 'ngRoute', 'mean-blog-seed.controllers', 'mean-blog-seed.services']);
Run Code Online (Sandbox Code Playgroud)

然后我有一个引用angular-route.js的玉文件:

script(type='text/javascript', src='js/lib/angular/angular.min.js')
script(type='text/javascript', src='js/lib/angular-route/angular-route.min.js')
script(type='text/javascript', src='js/lib/angular-cookies/angular-cookies.min.js')
script(type='text/javascript', src='js/lib/angular-resource/angular-resource.min.js')
script(type='text/javascript', src='js/lib/angular-bootstrap/ui-bootstrap-tpls.min.js')

script(src='js/app.js')
script(src='js/config.js')
script(src='js/services/global.js')
script(src='js/controllers/posts.js')
script(src='js/controllers/header.js')
script(src='js/filters.js')
script(src='js/directives.js')
Run Code Online (Sandbox Code Playgroud)

回购在这里

更新: 我在github上发布了这个问题并引用了这个疯狂的答案:https://github.com/angular/angular.js/issues/4675

ng-closure-runner在编译期间运行角度特定传递,其中添加了MINERR_ASSET的定义,该资产不包含在任何1.2.x版本中(包含源映射的唯一版本).但是,源映射引用MINERR_ASSET作为源,因此在请求文件时有404.

我只是快速浏览了咕噜咕噜的任务以及ng-closure-runner,但我认为这可能是ng-closure-runner包括minErr.js或基于它生成的一些文件.无论哪种方式,正确的资产都应该与其他源文件一起打包,或者MINERR_ASSET应该从源地图"sources"中删除.

javascript angularjs angularjs-routing

8
推荐指数
1
解决办法
4675
查看次数