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

당신은 item에 객체 참조로 vm.fordirective을 설정할 수 있습니다 :

다음 testdir은 태어나 셨 것 d item에서 모델 값으로 사용할 필드를 어떻게 든 알 수 있습니다. 예를 들어, 도우미 속성을 사용하자 :

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

을 마지막으로 지시 템플릿에 당신은 directivevalue[field]에 결합해야합니다

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

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

+0

난 당신이 요점을 놓치고 생각합니다. 또는 나는 그 요점을 놓치고있다. 루프에서 입력 * *을 편집하기 시작하면 바인딩이 끊어집니다. 루프에서 입력을 클릭 한 다음 "testdir"에서 입력을 편집 한 다음 루프의 다른 입력을 클릭하십시오. –

+0

@ dfsq이 작동하지 않는다. 목록에서 두 번째 입력을 클릭했다고 가정하면 두 번째 입력 값과 함께 지시문이 표시됩니다.지시 값 입력에서 값을 변경하면 격자 목록의 두 번째 입력 값이 변경되지 않습니다. –

+1

@TechSolvr 맞습니다. 오해했습니다. 적절한 데모 버전으로 올바른 버전을 확인하십시오. – dfsq

1

확인이 작업 plnkr -

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

,210

지침 코드 -

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

) 왜냐하면 angle은 양방향 데이터 바인딩을 매우 원활하게 처리하기 때문입니다.

이렇게하려면 전체 항목을 지시어 범위와 바인딩 할 수 있습니다.

확인 작업 plunkr :

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

지침 코드 :

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

관련 문제