2015-07-17 3 views
0

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

я в настоящее время следующие:

<input create-user-dropdown ng-model="userValue" data-my-var="myVar" /> 

app.directive('createUserDropdown', function(){ 
    return { 
     restrict: 'A', 
     scope: { 
      myVarNameHere: "=" 
     } 
     link: function(scope, elem, attr){ 
      scope.$watch(attrs.ngModel, function (value) { 
       $scope.myVarNameHere = value; 
      }); 
     } 
    }; 
}); 

Как я могу использовать имя переменной, которая передается через data-my-var в качестве переменной области действия вместо текущей в моей директиве, которая в настоящее время под названием myVarNameHere?

+0

использовать [кронштейн обозначения] (HTTPS : //developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Property_Accessors#Bracket_notation), например '$ scope [myVarNameHere]' – Grundy

+0

@Grundy - И как мне сделать то же самое внутри 'scope: {myVarNameHere:" = "}'? – Fizzix

+0

кажется, что вам не нужна изолированная область, используйте переменную непосредственно из области видимости. также вы можете объяснить с помощью образца, что вы хотите? теперь это не ясно – Grundy

ответ

1

как мы выяснили в комментариях вы можете создать директиву с шаблоном, как

.directive('myDir', function($http) { 
    return { 
    scope:{ 
     val: '=',//variable from parent scope for handling input value, if result of input not used outside directive can be removed 
     template: '=' // template url for repeated div 
    }, 
    template: '<input ng-model="val" ng-change="search()" />'+ 
       '<div ng-repeat="item in founded" ng-include="template"></div>', 
    link: function link(scope, iElement, iAttrs, controller, transcludeFn) { 
     scope.search = function(){// create change handler 
     //use value `data-service` attribute as service name 
     $http.get(iAttrs.service).success(function(data){ 
      scope.founded = data; 
     }); 
     }  
    } 

    } 
} 

рабочего plunkr

1

Попробуйте так:

<input create-user-dropdown ng-model="userValue" data-my-var="myVar" /> 

app.directive('createUserDropdown', function(){ 
    return { 
     restrict: 'A', 
     scope: { 
      myVarNameHere: "=myVar" 
     }, 
     link: function(scope, elem, attr){ 
      scope.$watch(attrs.ngModel, function (value) { 
       scope.myVarNameHere = value; 
      }); 
     } 
    }; 
}); 
+0

Значение data-my-var является динамическим и будет отличаться для каждого ввода, который у меня есть. Итак, как я могу установить 'myVarNameHere:" = myVar "как значение, которое передается через атрибут данных? – Fizzix

+0

после '=' sign - not value attribute, но имя атрибута, поэтому в случае, если в образце 'myVarNameHere' связано значение для атрибута' data-my-var' – Grundy

+1

data-my-var имеет значение myVar - это не рассматривается как ценность. Поэтому вам нужно определить параметр $ scope.myVar в вашем контроллере –

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