【问题标题】:ng-init not working angularjsng-init 不工作
【发布时间】:2016-05-09 12:49:02
【问题描述】:

我收到解析错误

语法错误:标记“{”是表达式 [user= ${user}] 的第 8 列中的意外标记,从 [{user}] 开始。

home.html

 <body ng-controller="mainCtrl" ng-init="user= ${user}">

参考这个例子,我将模型发送到 angularjs Getting data from Spring MVC in Angular JS in the initial view call.

controller.js

angular.module('userSystem', [ 'ngRoute' ]).config(

  function($routeProvider, $httpProvider) {

    $routeProvider.when('/', {
      templateUrl : 'home.html',
      controller : 'home'
    }).when('/login', {
      templateUrl : 'login.html',
      controller : 'navigation'
    }).otherwise('/');

}).controller('mainCtrl',
    function($rootScope, $scope, $http, $location, $route) {
})
});

弹簧控制器

@RequestMapping(value = "/", method = RequestMethod.GET)
   public  String getIndex(Model model)
   {
     model.addAttribute("user","user");
     return "home";

   }

请让我知道这里出了什么问题以及如何解决它。谢谢

【问题讨论】:

  • 你能把mainCtrl的代码也贴出来吗?
  • 感谢更新。您似乎错误地声明了您的控制器,它应该看起来像这样 .controller('mainCtrl', ["$rootScope", "$scope", "$http", "$location", "$route", function($rootScope, $scope, $http, $location, $route) {}]);
  • 用户春天回来,我已经添加了代码
  • 你能发布你使用的代码吗?

标签: angularjs spring-boot


【解决方案1】:

尝试更改您的控制器,因此您可以发送一个 ModelAndView 对象,而不是只发送一个带有视图名称的字符串:

@RequestMapping(value = "/", method = RequestMethod.GET)
public ModelAndView getIndex() {

    ModelAndView mv = new ModelAndView("home");
    mv.addObject("user", "USER_NAME");
    return mv;
}

另一方面,您是否使用任何模板框架(thymeleaf、velocity...)?因为在这种情况下,您的问题可能在于您如何在前端获取模型属性。

EDIT(作为模板框架问题的答案):

如果您使用的是 thymeleaf,则需要在 index.hmtl 中执行类似的操作:

<body ng-controller="mainCtrl as main" data-th-attr="ng-init='main.user=\''+${user}+'\''>

我发现自己过去曾遇到过这个问题。

【讨论】:

  • 另外,作为一个好的做法,请注意我为控制器设置了一个别名,以避免前端应用程序中出现不必要的范围问题。也更清楚什么是什么
【解决方案2】:

如果您删除用户周围的花括号并更改为这个,它将为您删除您的语法错误:

<body ng-controller="mainCtrl" ng-init="user= $user">

假设您是 spring 代码并且$user 的人口工作正常。

【讨论】:

  • 删除大括号时,用户值未定义
  • 您需要将$user 作为依赖添加到mainCtrl
  • 我无法将依赖添加为 $user,因为用户既不是服务也不是控制器
  • 我不熟悉 spring,所以我不确定它在做什么,看起来你正在将模型上的 user 属性设置为字符串“user”。这应该是一个字符串吗?另外,您如何从 JavaScript 访问模型上的用户属性?
【解决方案3】:

我使用了来自 angularjs 的解析来填充用户详细信息。

$routeProvider.when('/', {
      templateUrl : 'home.html',
      controller : 'home',
      resolve: {
        message: function(messageService){
            var promise= messageService.getMessage();
            promise.then(data){
            allConstants.user=data;
            }
            return promise;
        }
    }
    }).when('/login', {
      templateUrl : 'login.html',
      controller : 'navigation'
    }).otherwise('/');

这里的 allConstants 是一个可供整个应用程序控制器访问的变量

【讨论】:

    猜你喜欢
    • 2016-09-09
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-01
    • 2014-01-22
    • 1970-01-01
    相关资源
    最近更新 更多