AngularJS - Невозможно связать vraiable, имя которого хранится в другой переменной с ng-моделью - PullRequest
0 голосов
/ 09 ноября 2018

Привязка имени переменной, имеющей в другом доступном на одном уровне, работает, но не работает с многоуровневым объектом. ниже приведен пример.

var app = angular.module('app', []);
app.controller("stageController", stageController);
function stageController($scope) {
    $scope.model = 'realModel';
    $scope.notmodel = 'realModel.innerRealModel';
    $scope.vars = {};    // variables container
    $scope.vars.realModel ="this is working";
    $scope.vars.realModelNot = {};
    $scope.vars.realModelNot.innerRealModel = 'this is not working';
}
<script src="//unpkg.com/angular/angular.js"></script>
<body ng-app="app" ng-controller="stageController">
    <form name="myForm" novalidate="">
        <input type="text" name="myText" ng-model="vars[model]" />
        <input type="text" name="myText2" ng-model="vars[notmodel]" />
    </form>
    <p>Textbox1 : {{vars.realModel}}<p>
    <p>Textbox2 : {{vars.realModelNot.innerRealModel}}<p>
</body>

Пожалуйста, дайте мне знать, чтобы сделать это без использования каких-либо средств воздействия.

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Проблема в путях, которые вы пытаетесь использовать. Первый уровень работает, потому что вы делаете

$scope.model = 'realModel';  // so your template will change vars[model] 
                             // to vars['realModel']

но для второго уровня вы делаете

$scope.notmodel = 'realModel.innerRealModel'; // so your template will bind to
                                              // vars['realmodel.innerRealModel']
                                              // and you want vars['realmodel']['innerRealModel']

Кроме того, если вы связываете vars.realModel с полем ввода строки, он больше не сможет содержать свойства объекта, такие как innerRealModel

0 голосов
/ 09 ноября 2018

Проблема в том, что вы делаете что-то вроде vars [realModel.innerRealModel], что не работает. Для того, чтобы сделать что-то подобное, вам нужно сделать:

vars[realModelNot][innerRealModel]

Еще один вопрос, почему просто не использовать непосредственно прицел? Зачем создавать другие свойства области для хранения имени свойств, к которым вы хотите получить доступ?

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<body ng-app="app" ng-controller="stageController">
    <form name="myForm" novalidate="">
      <input type="text" name="myText" ng-model="vars.realModel" />
      <input type="text" name="myText2" ng-model="vars.realModelNot.innerRealModel" />
    </form>
    <p>Textbox1 : {{vars.realModel}}<p>
    <p>Textbox2 : {{vars.realModelNot.innerRealModel}}<p>
</body>
<script>
var app = angular.module('app', []);
function stageController($scope) {
    $scope.vars = {};    // variables container
    $scope.vars.realModel ="this is working";
    $scope.vars.realModelNot = {};
    $scope.vars.realModelNot.innerRealModel = 'this is not working';
}
</script>
...