2017-03-29 8 views
-3

J'essaie de comprendre comment eval() fonctionne dans AngularJS, mais je n'arrive pas à comprendre.

Je donne les résultats suivants:

$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 
    }; 
} 

Pour certains eval raison fonctionne très bien quand je pousse des valeurs à un tableau de variables. Cependant, pour une raison quelconque, eval('$scope.' + variable + 'Rate') = ne fonctionne pas et j'obtiens l'erreur ReferenceError: Invalid left-hand side in assignment. J'essaie de rendre ma fonction dynamique, afin que je puisse l'utiliser pour plus d'un $scope. Comment résoudre ceci avec AngularJS?

Il arrive aussi d'échouer à ce point

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

Pourquoi utilisez-vous eval? Pas une bonne idée. – Phix

+2

Pourquoi diable faites-vous cela? – Pytth

+0

@Phix, Comment est-ce que je pourrais faire une fonction dynamique où je peux entrer le nom de la portée dans la fonction et modifier la portée avec le nom de la variable donnée? L'idée est que j'ai plusieurs tableaux $ scope qui utilisent les mêmes fonctions, à savoir add, qui sont exactement les mêmes, en plus des noms de variables. – PhyCoMath

Répondre

4

Pourquoi ne pas utiliser simplement bracket notation? https://jsfiddle.net/duoxoq8j/2/

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

Ceci est juste une fonctionnalité javascript de base et n'a rien à voir avec angulaire ou champs d'application en particulier.

+0

Dois-je changer mes $ oscilloscopes pour cela? J'ai '' Uncaught SyntaxError: Unxpected token ['quand j'ai changé mes étendues. Je ne savais même pas que cela existait ... – PhyCoMath

+0

Découvrez le violon pour un exemple –

+0

Nice! Je ai travaillé pour les exemples de la portée :) mais pour une raison quelconque, il casse sur mon édition, mais je peux probablement le déboguer et savoir pourquoi :) Je ne savais pas vraiment que je pourrais utiliser des étendues comme ça, alors merci :) – PhyCoMath