2015-12-02 3 views
3

У меня есть ng-click, что мне нужно вызвать один из 4 методов в зависимости от переменной. Я показываю определенный контент на странице в зависимости от того, что я называю {{vm.class}}, что может быть, например, словом Group. В зависимости от того, является ли это Group или нет, я хочу назвать метод createGroup(). Поэтому, если {{vm.class}} равно Project Я бы хотел, чтобы ng-click позвонил createProject(). Я не уверен, что это лучший способ добиться этого. Это, по сути, что я хочу, чтобы это произошло, хотя я знаю, что это не работает:Сделать ng-click вызывать определенный метод в зависимости от переменной

data-ng-click=vm.create{{vm.class}}(), который бы назвал createGroup() или createProject()

EDIT:

Так что-то вроде:

data-ng-click="create(vm.class)"

и затем:

function create(class){ 
    switch(class){ 
    case Group 
     createGroup(); 
    } 
    etc.... 
} 

ответ

3

Я бы предложил сохранить логику в контроллере. То есть ngClick должен вызвать общую функцию в контроллере, которая будет определять, какую функцию вызывать на основе других параметров.

HTML:

<any ng-click="vm.create()"></any> 

Контроллер:

vm.create = function() { 
    switch(vm.class) { 
    //logic 
    } 
} 
+1

ха-ха я Ниндзя отредактируйте то же самое. Ладно, это то, о чем я думал. Я дам вам + – erp

+1

Прохладный :) Я думаю, что это лучший способ – yarons

+0

Да, приятный и простой. Игнорируйте мое редактирование тоже! – Ankh

0

Так что-то вроде:

data-ng-click="create(vm.class)"

Вы можете использовать сразу, как это если добавить create метод $scope

или с немного модификации:

data-ng-click="vm.create(vm.class)" 

и

vm.create = function create(class){ 
    switch(class){ 
     case Group 
      createGroup(); 
     } 
    etc.... 
} 

или даже без общего создать функцию как этот

data-ng-click="vm['create'+vm.class]()" 
+0

Я думаю 'vm ['create' + vm.class]()' хорошая идея, но ошибка подвержена – yarons

+0

@yarons, какая ошибка? например, когда 'vm' не содержит функцию _'create '+ vm.class_? – Grundy

+0

Да. Именно это. – yarons

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