【问题标题】:How to use $scope.eval() in angularjs to set $scope variable如何在 angularjs 中使用 $scope.eval() 来设置 $scope 变量
【发布时间】:2017-03-29 19:54:22
【问题描述】:

我试图弄清楚 eval() 在 AngularJS 中是如何工作的,但我似乎无法理解它。

我有以下几点:

$scope.salaryRate, $scope.priceRate = {
    number: undefined,
    type: undefined,
    from: undefined,
    to: undefined,
    rate: undefined
}

$scope.addRate = function (variable) {
    eval('$scope.' + variable).push({
        'number': eval('$scope.' + variable + 'Rate').number,
        'type': eval('$scope.' + variable + 'Rate').type,
        'days': {
        'days': eval('$scope.' + variable + 'SelectedDay'),
        'daynames': displayDayNames($scope.dayNames, eval('$scope.' + variable + 'SelectedDay'))},
         'from': eval('$scope.' + variable + 'Rate').from,
         'to': eval('$scope.' + variable + 'Rate').to,
         'rate': eval('$scope.' + variable + 'Rate').rate,
         'id': eval(variable + 'Number')
    });
    eval('$scope.' + variable + 'Rate') = {
        number: undefined,
        type: undefined,
        from: undefined,
        to: undefined,
        rate: undefined
    };
}

由于某种原因,当我将值推送到变量数组时,eval 工作正常。但是由于某种原因eval('$scope.' + variable + 'Rate') = 不起作用,我收到错误ReferenceError: Invalid left-hand side in assignment。 我正在尝试使我的函数动态化,以便我可以将它用于多个$scope。如何用 AngularJS 解决这个问题?

此时也恰好失败

function findRowIndex(variable, id){
    eval('var ' + variable + 'Rows') = eval('$scope.' + variable);
}

【问题讨论】:

  • 你为什么使用 eval?不是个好主意。
  • 你到底为什么要这样做?
  • @Phix,我将如何创建一个动态函数,我可以在函数中输入范围名称并使用给定的变量名称修改范围?这个想法是我有多个 $scope 数组,它们使用相同的函数,即 add,除了变量名之外,它们完全相同。
  • @Pytth 正如我所说,我试图避免使用两个完全相同的函数,只是在不同的 $scope 变量集上。
  • @PhyCoMath 我看到你已经有了答案,对你有好处:) 祝你好运

标签: javascript angularjs eval dynamic-variables


【解决方案1】:

为什么不直接使用bracket notationhttps://jsfiddle.net/duoxoq8j/2/

$scope.addRate = function (variable) {
    $scope[variable].push({
        ...
    });
    $scope[variable + "Rate"] = {
        number: undefined,
        type: undefined,
        from: undefined,
        to: undefined,
        rate: undefined
    };
}

这只是基本的 javascript 功能,与 Angular 或范围无关。

【讨论】:

  • 我是否也必须为此更改我的 $scopes?当我改变我的范围时,我得到了Uncaught SyntaxError: Unexpected token [。我什至不知道这存在......
  • 查看小提琴的例子
  • 不错!我适用于范围示例 :) 但由于某种原因它在我的编辑中中断,但我可能可以调试它并找出原因:) 真的不知道我可以使用这样的范围,所以谢谢 :)跨度>
  • javascript 中的一切都是一个对象。阅读:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • 谢谢,我去看看 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-23
相关资源
最近更新 更多