4

У меня есть условие, в котором у меня есть поля ввода в листинге сетки, и у меня есть одна директива, теперь я хочу отправить значение этой директиве, что когда-либо значение ввода ... этот момент его работает нормально, но теперь, когда я пытаюсь изменить значение из поля ввода директивы, он не обновляет поле ввода сетки списка, для которого задано значение для директивы.Измените значение области управления в директиве AngularJS

Вот рабочий plnkr, дайте мне знать, что я делаю неправильно.

http://plnkr.co/edit/DZdN4itTNccVsuBEJahr?p=preview

Мой controller & directive код похож -

var myApp = angular.module('myApp', []); 

myApp.controller('mainCtrl', function(){ 
    var vm = this; 

    vm.fordirective = ''; 

    vm.list = [ 
    {id: "1", name: 'Test 1', age: 35}, 
    {id: "2", name: 'Test 2', age: 36}, 
    {id: "3", name: 'Test 3', age: 37}, 
    {id: "4", name: 'Test 4', age: 38}, 
    ]; 
}) 

myApp.directive('testdir', function(){ 
    return { 
    restrict: 'EA', 
    scope: { 
     directivevalue: "=" 
    }, 
    templateUrl: 'dirtemplate.html', 
    link: function(scope, elem, attrs) { 

    } 
    }; 
}) 

ответ

2

Вы можете настроить vm.fordirective быть ссылка на объект для item:

Тогда testdir будет урожденная d знать каким-то образом из поля item для использования в качестве значения модели. Например, давайте использовать вспомогательный атрибут:

<testdir directivevalue="vm.fordirective" field="age">Loading..</testdir> 

И, наконец, в шаблоне директивы необходимо привязать к directivevalue[field]:

<input type="text" ng-model="directivevalue[field]" /> 

Demo: http://plnkr.co/edit/jWKwDJvYOutcLihi7UyC?p=preview

+0

Я думаю, вы пропустили точку. Или мне не хватает смысла. Как только вы начнете редактировать вход * not * в цикле, привязка будет нарушена. Попробуйте нажать на вход в цикле, а затем отредактировать ввод в «testdir», а затем щелкнуть по другому входу в цикле. –

+0

@dfsq его не работает .. предположим, вы нажали на второй вход из списка. Затем он отобразит директиву со значением второго ввода ....теперь измените значение из директивного ввода, и вы увидите, что второе входное значение в списке сетки не изменяется. –

+1

@TechSolvr. Вы правы, я неправильно понял. Проверьте правильную версию с надлежащей демонстрацией. – dfsq

1

Проверьте это рабочее plnkr -

http://plnkr.co/edit/DZdN4itTNccVsuBEJahr?p=preview

Директива код -

myApp.directive('testdir', function(){ 
    return { 
    restrict: 'EA', 
    scope: { 
     directivevalue: "=", 
     index: "=" 
    }, 
    templateUrl: 'dirtemplate.html', 
    link: function(scope, elem, attrs) { 

     scope.setParentValue = function(directivevalue){ 
     scope.$parent.vm.list[scope.index].age = directivevalue; 
     }; 
    } 
    }; 
}) 

и сетки ввода списка, добавить ng-change отслеживать изменения значений в директиве -

<input ng-model="item.age" ng-click="vm.fordirective = item.age; vm.index = $index" ng-change="vm.fordirective = item.age; vm.index = $index" />

+0

К жесткому кодированию 'age' в функции директивной ссылки вы сделали его действительно навязчивым и не гибким. Например, вы не можете использовать его с другим именем свойства без директивы редактирования. – dfsq

+0

@dfsq Да, я согласен, что это не лучший код .. но в этом случае не будет слишком больно меняться, даже если я передаю возраст как атрибут директиве, а затем в более позднюю часть изменения мне нужно изменить сам – swapnesh

0

Вместо того, чтобы использовать $ родителя (как это не является хорошей практикой), потому что угловая рукоятка двусторонней передачи данных очень гладко сама.

Для этого вы можете связать полный элемент с областью действия директивы.

Проверить работает plunkr:

https://embed.plnkr.co/LyE0G0APhwC4nco1KvOw/

Директива код:

scope.setParentValue = function(directivevalue){ scope.directivevalue = directivevalue; };

Смежные вопросы