【问题标题】:Use of undefined constant with angular使用带角度的未定义常量
【发布时间】:2014-10-15 17:14:31
【问题描述】:

我正在尝试根据性别生成随机名字和姓氏并填写表格。我正在使用 angular $http 并且总体上对 angular 还是很陌生。每次加载时都会出现此错误

 Use of undefined constant firstName - assumed 'firstName' 

我的观点:

 @section('content')
 <form ng-app="getNameApp" ng-controller="getNameController">

   Male<input type="radio" ng-model="gender" value="male" name="gender" /><br />
   Female<input type="radio" ng-model="gender" value="female" name="gender" /><br />

   <input type="text" ng-model="{{ firstName }}" name="firstName" />
   <input type="text" ng-if="{{ lastName }}" value="{{ lastName.body }}" name="lastName" />

   <button ng-click="randomNameController()">Randomize</button>
</form>
@stop

我的 JS

angular.module('getNameApp', [])
.controller('getNameController', getNameController);

function getNameController ($scope, $http) {
   $scope.gender = 'male';

   var randomName = $http({
       url: '/randomName',
       method: "GET",
       params: {gender: $scope.gender}
   });

   randomName.success(function(data) {
       $scope.firstName = data.firstName;
       $scope.lastName = data.lastName;
   });
   randomName.error(function() {
       document.write(randomName);
   });

}

我的控制器

 public function randomName () {
    $faker = Faker\Factory::create();
    $gender = Input::get('gender');

    if ($gender == 'male') {
        $names = [
            'firstName' => $faker->firstNameMale
        ];
    } else {
        $names = [
            'firstName' => $faker->firstNameFemale
        ];
    }
    $names['lastName'] = $faker->lastName;
    return $names;
}

编辑:我检查了检查元素的网络选项卡,它说 createCharacter 出现 500 内部服务器错误。 (路由到页面)

【问题讨论】:

  • 从 ngmodel 中删除括号。你不应该把它放在 ngmodel 上。
  • 我很遗憾我只能投票一次,因为那太棒了。 :) 随机化按钮不起作用,但这是一个巨大的改进
  • 你在ng-click="randomNameController() 到底在做什么? ng-click="randomNameController() 是什么?您的数据看起来如何。这是一个例子plnkr.co/edit/ZDTO0l?p=preview
  • 它应该重新加载不同的名字和姓氏。我认为召回该功能会起作用。显然不是。
  • 它会起作用的。但是你需要实现它。你有那个代码吗?

标签: javascript ajax angularjs laravel blade


【解决方案1】:

所以看起来这个问题的直接答案是,ng-model="" 上没有括号。话虽如此,我的代码中有很多问题,它的工作版本如下。希望它可以帮助遇到类似问题的人。我知道这不是最干净的。

此代码创建了一个基于性别随机生成名称的表单。您可以选择性别并点击随机化以填充不同的名称。我正在使用https://github.com/fzaninotto/Faker 库来生成名称。

查看:

 <form ng-app="getNameApp" ng-controller="getNameController">

  Male<input type="radio" ng-model="gender" value="male" name="gender" /><br />
  Female<input type="radio" ng-model="gender" value="female" name="gender" /><br />

  <input type="text" ng-model="firstName" name="firstName" />
  <input type="text" ng-model="lastName" name="lastName" />

  <button ng-click="generate(gender)">Randomize</button>
</form>

JS:

 angular.module('getNameApp', []).controller('getNameController', getNameController);

函数 getNameController ($scope, $http) { $scope.gender = '男';

$scope.generate = function (gender) {
    var randomName = $http({
        url: '/randomName',
        method: "GET",
        params: {gender: gender}
    });

    randomName.success(function (data) {
        var names = {
            firstName: data.firstName,
            lastName: data.lastName
        };
        $scope.firstName = names.firstName;
        $scope.lastName = names.lastName;

    });
    randomName.error(function () {
        document.write(randomName);
    });
    return $scope;

};

   $scope.generate($scope.gender);
}

控制器:

public function randomName () {
    $faker = Faker\Factory::create();
    $gender = Input::get('gender');

    if ($gender == 'male') {
        $names = [
            'firstName' => $faker->firstNameMale
        ];
    } else if ($gender == 'female') {
        $names = [
            'firstName' => $faker->firstNameFemale
        ];
    }
    $names['lastName'] = $faker->lastName;
    return $names;
}

【讨论】:

  • 我使用 document.write 只是为了快速测试我的代码。我想我需要return $scope,因为它在一个函数中。
【解决方案2】:

我没有看到那种错误,但是你有一个问题,你试图从 promise 中获取 firstName

randomName.success(function() {
     $scope.firstName = randomName.firstName; //<-- Here randomName is a promise not data
     $scope.lastName = randomName.lastName;
  });

获取作为success回调的第一个参数的数据,

 randomName.success(function(data) {
     $scope.firstName = data.firstName; 
     $scope.lastName = data.lastName;
  });

【讨论】:

  • 您正在显示作为值的对象的名字?
  • 根本没有加载js函数。不过新问题。我以前错了,提出一个新问题还是只编辑这个?
猜你喜欢
  • 2018-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-01
  • 1970-01-01
  • 2011-05-20
相关资源
最近更新 更多