触发ng-click后调用角度服务功能

时间:2016-09-04 11:55:19

标签: angularjs

我正在开发一个名为“request”和“purchase order”的模块。该请求可以查看和编辑已完成的采购订单。并且采购订单模块也用于管理采购订单。

基本上,它是相同的东西,但可以从请求或采购订单访问。因此,相反复制粘贴来自采购订单的所有代码,我决定传递id,然后调用Purchase Order Ctrl。然后我创建了一个服务来传递ID,因为我搜索使用$ broadcast不是一个好习惯。

ID可以成功传递,但为什么角点服务只会在点击ng-click后执行一次?

这是我的服务代码

.service('passID', function () {
    var id = null;
    var setID = function(passed_id) {
        id = passed_id;
    };

    var getID = function(){
        return id;
    };

    return {
        setID: setID,
        getID: getID
    };
})

这是我的请求控制器中的函数

var vm          = this;
vm.createModule = createModule;

function createModule(type,id){
    vm.state = null;
    switch(type){
        case "PurchaseOrder":
            vm.state = type;
            passID.setID(id);
        break;
    }
}

这是我的采购订单控制器中的代码

if(passID.getID() != null){
    vm.id = passID.getID();
    console.log(vm.id);
}

这是请求视图文件

 <li role="menuitem"><a href="" ng-click="vm.createModule('PurchaseOrder',item.id)">
    <i class="fa fa-pencil"></i> Create Purchase Order </a>
 </li>

 <div ng-controller="customerPurchaseOrderCtrl" ng-if="vm.state == 'PurchaseOrder'">
    <span ng-include="'app_view/modules/ship/purchase_order/customer/form.html'" ></span>
</div>

加载页面后,我启动ng-click功能,它运行良好,运行console.log(vm.id)。但是当我点击另一个请求数据时,它就不再起作用了。 console.log未运行。

我在这里做错了什么?谢谢:)

1 个答案:

答案 0 :(得分:0)

您的功能可能不公开,因为您没有通过$ scope或使用控制器别名来公开它。由于您使用的是控制器别名vm。在您的控制器中,您可以将createModule绑定到控制器的this引用,例如:

//at the beginnning of controller definition
var vm = this;
vm.createModule = createModule

这样你可以从VIEW访问vm的createModule函数,另一种方法是将createModule绑定到与这个方法几乎相似的范围,除了你在范围和范围上绑定方法默认情况下在VIEW中可用。