将函数放在angularjs,service或directive中的位置

时间:2016-03-21 08:54:11

标签: angularjs service directive

我有一个网格指令和相关服务。代码如下:

(function (window, angular) {
    'use strict';
    angular.module("myModule")
        .service("myGrid", [
            function () {
                var self = this;
                this.init_grid = function (scope, config) {
                    scope.itemsList = [];  // particular grid data
                };

                this.methodsList = {
                    add: function () {
                        // add logic...
                    },
                    edit: function (scope, evt, data) {
                    }
                };
            }
        ])
        .directive("myGridView", ["$compile", "myGrid", function ($compile, myGrid) {
            return {
                restrict: "E",
                replace: true,
                transclusion: true,
                templateUrl: "views/gridTemplate.html",
                scope: {
                    config: "="
                },
                link: function ($scope, iElement, iAttrs, controller) {
                    myGrid.init_grid(scope, scope.config);
                    // register method in scope
                    angular.forEach(myGrid.methodsList, function (method, k) {
                        scope[k] = method;
                        //scope[k] = function() {method($scope)}
                    });
                }
            };
        }
        ])
    ;

})(window, window.angular);
<form>
<my-grid-view config="config1"></my-grid-view>
<my-grid-view config="config2"></my-grid-view>
<my-grid-view config="config3"></my-grid-view>
</form>

我的问题是: 由于表格包含多个网格,并且它们在服务中调用相同的功能,添加或编辑功能如何知道哪个网格调用以及如何使用网格中的特定数据进行经销商?

目前,
(1)我将范围传递给添加或编辑功能以实现
//scope[k] = function() {method($scope)}
(2)另一种方式,在链接功能中,定义$scope.add = function() {}
(3)我也可以在指令中定义一个控制器并定义这些功能。

实现此目的的最佳做法是什么?

0 个答案:

没有答案