-1

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

Как добавить тег к контроллеру, когда пользователь нажимает на тег внутри директивы.

немного кода:

app.controller('MainCtrl', function($scope) { 

    $scope.chosenTags = ['clickToRemoveMe', 'if you click on tags below they should appear here']; 

    $scope.jokes = [{ 
     id: 0, 
     content: 'bla bla bla bla', 
     tags: ['fat', 'blondes'] 
    },{ 
     id: 1, 
     content: 'another another another ', 
     tags: ['thin', 'dark'] 
    }]; 

    $scope.addTag = function(tag) { 
     $scope.chosenTags.push(tag); 
    }, 

    $scope.removeTag = function(tag) { 
     removeA($scope.chosenTags, tag); 
    } 

}); 

app.directive("joke", [function() { 

    return { 
     restrict: 'E', 
     templateUrl: 'joke.html', 
     scope: { 
      joke: '=' 
     } 
    }; 
}]); 

plunker: http://plnkr.co/edit/Vpip4mWmWeH8Lvi7I5t5?p=preview

ответ

1

Вы используете изолированный объем, поэтому ng-click="addMe(tag)" не будет ничего делать, так как функция addMe не существует нигде на объем.

У вас есть несколько вариантов, но я просто добавил ссылку на функцию и положить, что в объеме:

Директива:

scope: { 
    joke: '=', 
    addMe: '=' 
} 

HTML:

<joke ng-repeat="joke in jokes" joke="joke" add-me="addTag"></joke> 

Plunker

Кроме того, вы должны добавить проверку, прежде чем вставить в chosenTags массив, чтобы избежать этих ошибок консоли:

$scope.addTag = function(tag) { 
    if ($scope.chosenTags.indexOf(tag) === -1) { 
     $scope.chosenTags.push(tag); 
    } 
} 
Смежные вопросы