【问题标题】:Angular JS works in main layout(view) but not in child view of laravel 4.2Angular JS 适用于主布局(视图),但不适用于 laravel 4.2 的子视图
【发布时间】:2015-05-07 00:42:44
【问题描述】:

我正在尝试将 Angular JS 与 Laravel 4.2 一起使用。我已将刀片的默认 {{}} 更改为 [[]],它运行良好,现在的问题是当我将 Angular JS 代码放在主布局(视图)中时它可以工作,但是当我将 Angular JS 代码放在一个孩子中时视图(实际上子视图扩展了主布局,部分是使用 @section('contents') ...Angular JS 代码... @stop)它根本不起作用,浏览器无法呈现 Angular JS 表达式并在代码编辑器中显示它!这是我的“main layout.blade.php”和“child.blade.php”:

“main.layout.blade.php”

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Customer Management</title>

    <!-- Bootstrap -->
    [[ HTML::style('css/bootstrap.min.css') ]]
    [[ HTML::style('css/custom.css') ]]

    [[--angular js files--]]
    [[HTML::script('/js/angular/angular.min.js')]]
    [[HTML::script('/js/controllers.js')]]

    [[--jquery bootsrtap js files--]]
    [[ HTML::script('js/respond.js') ]]
    [[ HTML::script('js/jquery-1.11.2.min.js') ]]
    [[ HTML::script('js/bootstrap.min.js') ]]

</head>

<body>

    @include('layouts.main-menu')

    <div class="container" id="container">
        <div ng-app=""><!-- This Angular JS works fine -->
            <p>Name : <input type="text" ng-model="name"></p>
            <h1>Hello {{name}}</h1>
        </div>

        @yield('content')
    </div>

    @include('layouts.footer')


    <script>
        $("nav ul li").on("click", function() {
            $("nav ul li").removeClass("active");
            $(this).addClass("active");
        });
    </script>
</body>
</html>

Child.blade.php

@extends('layouts.main')
<!doctype html ng-app="myApp">
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>

</head>
<body>

    @section('content')
        <div ng-app=""><!-- This Angular JS doesn't work fine -->
            <p>Name : <input type="text" ng-model="name1"></p>
            <h1>Hello {{name1}} </h1>
        </div>
    @stop
</body>
</html>

您可以清楚地看到两个文件中都使用了相同的 Angular Code sn-p,但在“layout.main.blade.php”中它可以工作,而在“child.blade.php”中它不能像在在@section('content') ... @stop 之间我无法理解这是为什么以及如何解决它!!!!!!

这是来自网络面板的响应:

GET localhost:8000

200 OK

localhost:8000

3.4 KB

[::1]:8000


141ms
HeadersResponseHTMLCacheCookies

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>

</head>
<body>

    </body>
</html>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Customer Management</title>

    <!-- Bootstrap -->
    <link media="all" type="text/css" rel="stylesheet" href="http://localhost:8000/css/bootstrap.min
.css">

    <link media="all" type="text/css" rel="stylesheet" href="http://localhost:8000/css/custom.css">



        <script src="http://localhost:8000/js/angular/angular.min.js"></script>

    <script src="http://localhost:8000/js/controllers.js"></script>


        <script src="http://localhost:8000/js/respond.js"></script>

    <script src="http://localhost:8000/js/jquery-1.11.2.min.js"></script>

    <script src="http://localhost:8000/js/bootstrap.min.js"></script>


</head>

<body>

    <div class="row">
    <nav class="navbar navbar-default navbar-fixed-top navbar-inverse">
        <div class="navbar-header">
            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#collapse"
>
                <span class="sr-only">Toggle navigation</span>
                <span class="glyphicon glyphicon-arrow-down"></span>
                MENU
            </button>
        </div>
        <div class="collapse navbar-collapse" id="collapse">
            <ul class="nav navbar-nav">
                                                    <li class="active"><a href="/" ><span class="glyphicon
 glyphicon-home"></span> Home</a></li>
                                <!--<li class="dropdown"><a href="#" data-toggle="dropdown">Dropdown
 <span class="caret"></span></a>
                    <ul class="dropdown-menu">
                        <li><a href="#">Dr. Winthrop</a></li>
                        <li><a href="#">Dr. Chase</a></li>
                        <li><a href="#">Dr. Sanders</a></li>
                    </ul>
                </li>-->
                <li><a href="cv/index"><span class="glyphicon glyphicon-edit"></span> Make CV</a></li
>
                <li><a href="#"><span class="glyphicon glyphicon-eye-open"></span> Example</a></li>

                <li><a href="#"><span class="glyphicon glyphicon-info-sign"></span> About</a></li>
            </ul>

            <ul class="nav navbar-nav navbar-right">
                                    <li><a href="http://localhost:8000/users/signin">Sign in</a></li
>
                    <li><a href="http://localhost:8000/users/newaccount">Sign Up</a></li>
                            </ul>

        </div>
    </nav>
</div>


    <div class="container" id="container">
        <div ng-app="">
            <p>Name : <input type="text" ng-model="name"></p>
            <h1>Hello {{name}}</h1>
        </div>

                <div ng-app="">
            <p>Name : <input type="text" ng-model="name1"></p>
            <h1>Hello {{name1}} </h1>
        </div>
        </div>

    <footer class="footer row ">
    <div class="col-lg-4 col-sm-4 col-md-4" id="links">
        <h4>Links</h4>
        <ul class="list-unstyled">
            <li>Link 1</li>
            <li>Link 2</li>
            <li>Link 3</li>
            <li>Link 4</li>
        </ul>
    </div>
</footer>

    <script>
        $("nav ul li").on("click", function() {
            $("nav ul li").removeClass("active");
            $(this).addClass("active");
        });
    </script>
</body>
</html>


1 request

3.4 KB

141ms (onload: 1.06s)

【问题讨论】:

  • 您能否也显示来自 PHP 请求的组合输出(只需检查网络面板中的响应并将其发布)。建议让服务器端充当 API,使用 JSON 单独通信和编写客户端代码,这将使客户端或服务器的调试和扩展或替换/补充部分更简单。
  • 你好@shaunhusain!我已经在这个问题中添加了回复,你能帮帮我吗!

标签: angularjs laravel-4


【解决方案1】:

我不是刀片用户,所以我无法准确告诉您如何解决此问题。我确实使用 PHP,但我使用 Eloquent(Laravel 的 ORM 部分)并使用 Slim 进行服务器端路由。我相信最好将您的 HTML 简单地编写为 HTML,使用 $http(与 $.ajax 基本相同)将您的数据放入客户端代码中,但将它们编写为完全独立的代码库。这将为您提供更大的灵活性并大大简化调试任务,因为您不需要同时找出服务器和客户端之间的问题。您可以使用 curl 或 POSTMan 单独测试服务器,然后可以使用模拟对象或对服务器端组件的真实请求单独构建/测试客户端。

在客户端,您显示的输出有很多问题,多个 html 标签(文档应该是 1)多个 ng-app(相同,页面通常在 html 或 body 标签上为 1 )。

对于引导使用 ui-bootstrap,您需要常规 bootstrap.css 文件和 ui-bootstrap-tpls.js 文件,但不需要 bootstrap.js。

如果你有 jQuery 绑定到某些元素的点击事件,你应该在标记中使用 ng-click 指令,也可以使用 ng-class 有条件地根据模型的状态。

您似乎对如何使用所有这些东西有了大致的了解,但是您需要清楚地分开这些东西并停止使用 jQuery 一段时间以习惯如何正确地使用 Angular 做事。如果您尝试在 Angular 的指令或测试之外使用 jQuery,您通常会做错事。详情见"Thinking in AngularJS" if I have a jQuery background?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-19
    • 2018-01-28
    • 1970-01-01
    • 2019-01-05
    • 1970-01-01
    • 1970-01-01
    • 2016-07-21
    • 2012-06-15
    相关资源
    最近更新 更多