使用带有Angular JS的Laravel时出现“Undefined Constant / Variable”错误...无法在刀片

时间:2016-08-04 07:54:01

标签: javascript php angularjs laravel

我正在使用laravel和angular js构建一个公共的后端办公室消息应用程序,我在我的仪表板控制器(扩展了基本控制器)中定义了一个变量(名为recieved)(显示未读新消息的总数)如下:

信息中心控制器:

var $data = array();

public function dashboardData(){
$toReturn = array();
$toReturn['siteTitle'] = $this->data['panelInit']->settingsArray['siteTitle'];


//------other things-----------//


$toReturn['stats'] = array();

//------some other things-----------//


$toReturn['stats']['recieved'] = messagesList::where('userId',$this->data['users']->id)->where('messageStatus',1)->count();

}
return json_encode($toReturn);

}

我正在使用angular来进行数据/变量传输/传递......以下是我的角度代码快照: -

Routes.js

skyla.config(function($routeProvider,$locationProvider) {

$routeProvider.when('/', {
  templateUrl : 'templates/main.html',
  controller  : 'dashboardController'
})

app.js

skyla.controller('mainController',function(dataFactory,$rootScope,$route,$scope) {
  var data = $rootScope.dashboardData;
  $scope.phrase = $rootScope.phrase;

  $scope.dashboardData = data;
  $rootScope.phrase = data.language;
  $scope.phrase = data.language;


}

变量(已接收)显示在我的主要(index / default / home /无论你怎么称呼)laravel的html模板中,使用了角度{{}}语法,如下所示:

HTML(适用于Main.html模板)

  <-------------some things-------------------------->

  <div class="counter">
  <div class="informational">{{dashboardData.stats.recieved}}</div>
  </div>

  <-------------some other things-------------------------->

并成功显示输出....

但是我想在layout.blade.php中显示相同的数据,我将其用于基本布局目的,以便收到的新消息的数量始终显示在每个用户的导航栏标题中...

我在layout.blade.php(目录:/ app / views)中使用相同的html结构,其角度为{{dashboardData.stats.recieved}}语法:

HTML(适用于布局框)

  <body ng-app="skyla" ng-controller="mainController">

  <-------------some things-------------------------->

  <div class="nav">
  <div class="informational">{{dashboardData.stats.recieved}}</div>
  </div>

  <-------------some other things-------------------------->

  </body>

但我得到“Undefined Constant:dashboardData”和“undefined Variable”错误......

以下是我的Laravel routes.php的一瞥: -

routes.php文件

Route::group(array('prefix'=>'/','before'=>'auth.Ui|auth.token|api.csrf'),function(){
    Route::get('/','DashboardController@index');

    Route::get('/dashboard','DashboardController@dashboardData');
    Route::get('/dashboard/baseUser','DashboardController@baseUser');

    //-------------some things-------------//

Route::post('/dashaboard','DashboardController@dashaboardData');

我对laravel与angular完全相关,我不确定是否将变量值传递给php或angular的布局balde,这将是安全和可行的实践......

我偶然发现了“view :: share”和“view:make”(我试过:返回视图('layout',['dashboardData'=&gt; $ toReturn]);)但是没有非常了解如何完美地做到这一点安全,没有一个错误...

我在“/app/libraries/initiation.php”中也有一个库设置,它将一些数据反映到layout.blade.php ......

我的问题

我将在最简单但最正确的练习中做什么,以便我可以在layout.blade.php中使用angular {{dashboardData.stats.recieved}}语法,而不会出现错误“Undefined Constant”和“undefined Variable”。 .. ??? 请解释一下,告诉我你是否需要更多的信息.​​.....我正在接受这项工作,其中前任开发人员已经完成了工作......

1 个答案:

答案 0 :(得分:0)

在我看来,刀片和角度之间存在冲突,因为两者都使用{{}}括号。 angular也有自己的渲染视图的方式。 layout.blade.php将{{}}解释为自己的而不是角度。在&#34;纯&#34; html你不会遇到这个问题,因为它是由用户端的角度渲染的。

最简单的方法是做你要求的(在我看来)是将Laravel和Angular文件分开,并使用Laravel作为角应用的API。因此,如果您计划开发一段时间,我会将刀片文件转换为html文件,以防止将来出现问题。 :)

那说黑客攻击这种情况的方法是用刀片作为字符串来回显这一行,或用&amp;#123(用于大括号的html代码)交换花括号。 所以基本上:

<div class="informational">&#123;&#123 dashboardData.stats.recieved  &#123;&#123 </div>