angular指令调用带参数的控制器方法

时间:2015-06-13 09:25:00

标签: javascript angularjs angularjs-directive angularjs-controller

我有一个控制器,带有获取参数的方法, 我想要一个指令来调用该方法并传递参数。

当用户单击指令内的标记时,如何向控制器添加标记。

一些代码:

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 个答案:

答案 0 :(得分: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);
    }
}