GVKun编程网logo

angularjs – Angular Laravel UI-Router问题(angular-ui-router)

17

对于想了解angularjs–AngularLaravelUI-Router问题的读者,本文将提供新的信息,我们将详细介绍angular-ui-router,并且为您提供关于AngularJSangu

对于想了解angularjs – Angular Laravel UI-Router问题的读者,本文将提供新的信息,我们将详细介绍angular-ui-router,并且为您提供关于AngularJS angular ui router – 将自定义数据传递给控制器、angularjs – Angular $routeParams是空白的、angularjs – Angular 2中的状态参数(Angular 1&ui-router)的等价物是什么?、angularjs – Angular Laravel项目的CORS问题的有价值信息。

本文目录一览:

angularjs – Angular Laravel UI-Router问题(angular-ui-router)

angularjs – Angular Laravel UI-Router问题(angular-ui-router)

我正在使用AngularJS,Laravel和UI-Router创建SPA.在Laravel routes.PHP文件中,我有一个单独的路由’/’来加载index.PHP,这是我所有的依赖项都包含在哪里以及angular被引导的地方.作为角度根镜的孩子,我有一个带有“ui-view”属性的div.这个div是使用UI-Router加载我的Angular模板的地方.

在我的角度模块.config中,我有一些UI-Router状态设置:

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

// Routes config using ui-router

$urlRouterProvider.otherwise('/');

$stateProvider
    .state('home',{
        url: '/home',templateUrl: 'templates/home.html',controller: 'HomeController'
    })

    .state('projects',{
        url: '/projects',templateUrl: 'templates/projects/index.html',controller: 'ProjectController'
    })
    .state('projects.create',{
        url: '/projects/create',templateUrl: 'templates/projects/create.html',controller: 'ProjectController'
    });
}]);

我遇到的问题是,当我加载第三个状态“projects.create”时,浏览器不会使用我的js / app.js主模块引导角度.它会触发错误:“警告:试图加载角度不止一次”.

但是当我加载“项目”状态时,它工作正常.此外,通过测试我意识到,如果我将“projects.create”状态URL更改为“/ createproject”,而不是“/ projects / create”,这就解决了问题.

我假设在尝试加载“js / app.js”和其他本地依赖项时这是一个路径干扰问题.我将如何解决此问题,以便应用依赖关系URL对UI路由器状态是动态的?

的index.PHP

<!DOCTYPE html>
<html>
<head>
    <Meta charset="utf-8">
    <Meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <Meta name="viewport" content="width=device-width,initial-scale=1">

    <title>AngularJS App</title>

        <!--css-->
        <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css"/>

</head>

<body ng-app="scynergyApp">
    <div>
        <div ui-view>

        </div>


    </div>
</body>
<!--js-->
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <script src="/js/bootstrap.min.js"></script>

    <!--angular core-->
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.js"></script>
    <script src="//cdnjs.cloudflare.com/ajax/libs/angular-ui-router/0.2.8/angular-ui-router.min.js"></script>
    <script src="/js/angular-sanitize.js"></script>
    <script src="/js/underscore.js"></script>
    <script src="/js/app.js"></script>


        <!--angular controllers-->
        <script src="/js/controllers/HomeController.js"></script>
        <script src="/js/controllers/ProjectController.js"></script>
</html>

routes.PHP文件

<?PHP
// =============================================
// HOME PAGE ===================================
// =============================================
Route::get('/',function(){
return View::make('index');
});

// =============================================
// API ROUTES ==================================
// =============================================
Route::group(array('prefix'=>'/api'),function(){
    Route::post('login','AuthController@Login');
    Route::get('logout','AuthController@logout');

    Route::resource('projects','ProjectsController',array('except' => array('create','edit','update')));
});

// =============================================
// CATCH ALL ROUTE =============================
// =============================================
// all routes that are not home or api will be redirected to the frontend
// this allows angular to route them
App::missing(function($exception)
{
    return View::make('index');
});

解决方法

您的projects.create状态映射到templates / projects / create.html url.

看起来你没有那个模板可用,所以它落入了你的全部App :: missing,它再次呈现整个页面.

再次加载页面时,您还会再次运行其所有链接的资源,因此您尝试再次运行角度. Angular检测到这个,然后吠叫.

只需确保在指定的URL上有该模板文件,一切都会好的.

AngularJS angular ui router – 将自定义数据传递给控制器

AngularJS angular ui router – 将自定义数据传递给控制器

以下是我的代码:

.state('tab.dash',{
      url: '/dash',views: {
          'tab-dash': {
              templateUrl: 'templates/tab1.html',controller: 'QuestionsCtrl'
              //,resolve: { type: '.net' }
          }
      }
  })

  .state('tab.friends',{
      url: '/friends',views: {
          'tab-friends': {
              templateUrl: 'templates/tab1.html',resolve: { type: 'sql' }
          }
      }
  })

我想将一个不同的自定义属性传递给上面两个路由,因为它们使用相同的Controller和View,以区分它.我尝试了很多东西.请帮忙怎么做!

解决方法

您可以按如下方式传递自定义数据

.state('tab.dash',data: {
        customData1: 5,customData2: "blue"
      },data: {
        customData1: 6,customData2: "orange"
      },resolve: { type: 'sql' }
          }
      }
  })

在控制器中,您可以按如下方式获取数据值

function QuestionsCtrl($state){
    console.log($state.current.data.customData1);
    console.log($state.current.data.customData2);
}

在这里阅读有关此主题的更多信息https://github.com/angular-ui/ui-router/wiki/Nested-States-%26-Nested-Views#inherited-custom-data

angularjs – Angular $routeParams是空白的

angularjs – Angular $routeParams是空白的

我有一个非常简单的Angular应用程序,我已经蒸馏到以下内容:
var napp = angular.module('Napp',['ngResource']);

var CompanyCtrl = function($scope,$routeParams,$location,$resource) {
    console.log($routeParams);
};


napp.config(['$routeProvider',function($routeProvider) {
    $routeProvider
    .when('/company/edit/:id',{templateUrl: '/partials/edit',controller: 'CompanyCtrl'}
    );
}]);

和HTML:

<div ng-controller="CompanyCtrl"></div>

当我记录$routeParams时,它出现空白.当我使用.otherwise(),它会加载我在那里指定的任何东西.任何想法我失踪了?

首先试试这个
$locationProvider.html5Mode(true);

这应该修复你的起始代码.然后调整代码以支持非pushState浏览器.

希望这可以帮助!

angularjs – Angular 2中的状态参数(Angular 1&ui-router)的等价物是什么?

angularjs – Angular 2中的状态参数(Angular 1&ui-router)的等价物是什么?

在Angular 1和ui-router中,我使用状态参数来将数据从一个状态传递到另一个状态(不使用URL参数).在Angular 2中有可能吗?

Router,RouteParams,RouterLink和RouteData似乎没有处理这个问题,例如我想将用户对象从一个状态传递到另一个状态

<a ui-sref="home({user: myCtrl.user})">

这在Angular 2中似乎不可能.

解决方法

如果你正在使用Angular 2路由器,你可以通过@RouteParams传递状态,例如,

<a [routerLink]="['/ProductDetail',{id: 1234}]">Product Details</a>

在这种情况下,id是你的状态,它可以是任何对象,例如:

<a [routerLink]="['/ProductDetail',myStateObject]">Product Details</a>

另一方面,Angular 2有一种机制,可以使用绑定传递参数到组件的@input()参数,但这只能在同一路径中使用.

angularjs – Angular Laravel项目的CORS问题

angularjs – Angular Laravel项目的CORS问题

我无法使用Angular创建Web应用程序,Angular正在访问由Laravel构建的RESTful API.
虽然我已经创建了传递正确标头的中间件,但它不起作用.

class Cors
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request,Closure $next)
    {
        return $next($request)
            ->header('Access-Control-Allow-Origin','*')
            ->header('Access-Control-Allow-Credentials','true')
            ->header('Access-Control-Allow-Methods','GET,POST,PUT,DELETE,OPTIONS')
            ->header('Access-Control-Allow-Headers','X-Requested-With,Content-Type,X-Auth-Token,Origin,Authorization');
    }
}

任何人都可以帮助我吗?

解决方法

嗯,这是一个令人讨厌的问题,我知道,但有2个解决方案.

1.

您为每个API调用路由定义OPTIONS方法,并使其通过您创建的中间件,如下所示:

Route::options('todos/{any?}',['middleware' => 'cors',function(){return;}]);
Route::options('projects/{any?}',function(){return;}]);

2

你破解Laravel核心类文件,以便它为每个OPTIONS请求传递CORS头.

在里面

/vendor/laravel/framework/src/framework/Illuminate/Routing/RouteCollection.PHP

你会发现以下功能

protected function getRouteForMethods($request,array $methods)
    {
        if ($request->method() == 'OPTIONS') {
            return (new Route('OPTIONS',$request->path(),function () use ($methods) {
                return new Response('',200,['Allow' => implode(',',$methods)]);
            }))->bind($request);
        }

        $this->methodNotAllowed($methods);
    }

将此函数更新为以下内容,以便它将为OPTIONS请求传递CORS标头

protected function getRouteForMethods($request,[
                    'Allow' => implode(',$methods),'Access-Control-Allow-Origin' => '*','Access-Control-Allow-Credentials' => 'true','Access-Control-Allow-Methods' => 'GET,OPTIONS','Access-Control-Allow-Headers' => 'X-Requested-With,Authorization',]);

            }))->bind($request);
        }

        $this->methodNotAllowed($methods);
    }

所以对我来说,两种解决方案都可行.选择是你的.
但解决方案#2是Laravel核心上的黑客攻击,如果升级Laravel本身可能会遇到一些问题?但至少它编码较少. :d

希望这些解决方案有所帮助.

今天的关于angularjs – Angular Laravel UI-Router问题angular-ui-router的分享已经结束,谢谢您的关注,如果想了解更多关于AngularJS angular ui router – 将自定义数据传递给控制器、angularjs – Angular $routeParams是空白的、angularjs – Angular 2中的状态参数(Angular 1&ui-router)的等价物是什么?、angularjs – Angular Laravel项目的CORS问题的相关知识,请在本站进行查询。

本文标签: