AngularJS指令与包括params的父函数交互

时间:2016-02-11 07:57:14

标签: angularjs angularjs-directive

在我的主控制器中,我有一个在页面上设置消息的功能:

function setMessageState(showSuccess, showError, message) {
        vm.showSuccessMessage = showSuccess;
        vm.showErrorMessage = showError;
        vm.message = message;
    }

在我的主控制器和服务中,如果服务成功或检索数据失败,我会通过调用此消息将消息中继给用户。

我已将其中一个转发器移动到一个处理表格数据迭代的指令中,但部分依赖于调用setMessageState函数并将参数反馈到主VM中。

任何人都可以协助我如何从包含params的指令调用我的setMessageState函数吗?

我确实尝试过包含setMessageState:"&"虽然没有定义重写setMessageState的问题,但它没有调用函数

我的指示是:<​​/ p>

(function () {
'use strict';
//Define the Controller
angular
    .module("tpAccStatus")
    .directive("tpAccStatusTransactionRow", tpAccStatusTransactionRow);

function tpAccStatusTransactionRow() {
    return {
        scope: {
            trans: "=tpAccStatusTransactionRow",
            accountNumber: "="
        },
        restrict: "A",
        replace: true,
        templateUrl: "tpAccStatusTransactionRow.directive.html",
        bindToController: true,
        controller: "tpAccStatusTransactionRowCtrl",
        controllerAs: "transCtrl"
    };
}

})();

我的指令控制器有一个函数,它调用(需要调用)父控制器函数:

function requestStatementErrored(error) {
        vm.busy = false;
        vm.setMessageState(false, true, "Problem obtaining details");
    }

由于

2 个答案:

答案 0 :(得分:0)

该指令不会对您父级中的vm有任何了解,相反,您可以将一个范围属性添加到您的指令中,然后绑定到父级中对该函数的引用

所以:

scope: {
            trans: "=tpAccStatusTransactionRow",
            accountNumber: "=",
            messageStateFn: "="
    }

然后在使用您的指令时,您可以这样设置:

<tr tpAccStatusTransactionRow messageStateFn="vm.setMessageState"></tr>

在指令控制器中:

function requestStatementErrored(error) {
        scope.setMessageState(false, true, "Problem obtaining details");
    }

答案 1 :(得分:0)

你可以从你的指令中做到这一点,

scope: {
        trans: "=tpAccStatusTransactionRow",
        accountNumber: "=",
        setMessageState: '&'
    },

function requestStatementErrored(error) {
   vm.setMessageState({showSuccess: false, showError: true, message: "Problem obtaining details");
},

和HTML,

<tr tpAccStatusTransactionRow set-message-state="vm.setMessageState"></tr>