【问题标题】:Adding ng-init code from json object从 json 对象添加 ng-init 代码
【发布时间】:2016-06-13 11:19:10
【问题描述】:

我正在尝试将 ng-init 的值绑定到来自 json 对象的输入。

但是我得到“语法错误:令牌”我哪里出错了?

$scope.obj = { init: 'obj.value = obj.value || 20' };

Plnkr : http://plnkr.co/edit/nmaxLvbqijXPBKoaQTUQ?p=preview

【问题讨论】:

  • 只需删除大括号。它应该工作

标签: javascript angularjs


【解决方案1】:

使用ng-required 代替ng-init

<form name="someformname">
  <input type="text" name="someinputname" ng-model="obj.value" ng-required="{{obj.init}}" /> 
</form>

希望对你有帮助:)

【讨论】:

  • 你为什么不能用这个?
【解决方案2】:

将 init 视为改变 obj 值的函数。

$scope.obj = { 
    init: function(){
          $scope.obj.value = $scope.obj.value || 20;
         } 
};

<input type="text" name="someinputname" ng-model="obj.value" ng-init="obj.init()" /> 

Plunker

【讨论】:

  • 但是输入字段的值默认没有设置为20。
【解决方案3】:

你可以试试下面的代码:

html

<input type="text" name="someinputname" ng-model="obj.value" ng-init="loadObj()" /> 

js

 $scope.obj = {
    value: null
 };

 $scope.loadObj = function() {
     $scope.obj = { 
        init:  {
          value:  $scope.obj.value | 20
        }
     };

   $scope.obj = $scope.obj.init;

 }

【讨论】:

    【解决方案4】:

    可以这样:

    ng-init="$eval(obj.init)"
    

    PLUNK

    ng-init 内部是这样做的:scope.$eval(attrs.ngInit),所以上面的表达式会这样执行:

    scope.$eval('$eval(obj.init)')
    

    执行存储在obj.init中的表达式。

    按照 cmets 中的建议,简单地删除大括号是行不通的,因为它会导致以下调用:

    scope.$eval('obj.init')
    

    它只返回obj.init 的值,但NOT 执行它!

    【讨论】:

      猜你喜欢
      • 2014-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-20
      相关资源
      最近更新 更多