【问题标题】:Is it possible to implement trait in AngularJS?是否可以在 AngularJS 中实现 trait?
【发布时间】:2019-07-22 08:47:49
【问题描述】:

我想在 AngularJs 中实现 PHP 等特性。最好的解决方案是什么?

【问题讨论】:

    标签: angularjs mixins composition angular-module


    【解决方案1】:

    我找到了一个简单的方法:

    首先,创建一个名为traits.js的文件

    angular.module('myApp')
    .factory('Traits', function() {
        return {
            apply: function (_class, _trait) {
                _.each(_trait, function (method, name) {
                    _class.prototype[name] = method;
                });
            }
        }
    });
    

    然后,创建你的特征文件my-trait.js

    angular.module('myApp')
    .factory('MyTrait', function() {
        return {
            someMethod: function (param) {
                // 
            },
            anotherMethod: function (param) {
                // 
            }
        }
    });
    

    然后像这样使用特征:

    angular.module('myApp')
    .factory('MyResource', function($resource, Traits, MyTrait) {
        var resource = $resource();
        Traits.apply(resource, MyTrait);
    
        return resource;
    });
    

    【讨论】:

    • 1/3 ... 这看起来很像基于“木材”对象的 mixins(只是一种只有方法的配置对象)进入 Angular 环境。这种方法看起来也将其限制为仅增强构造函数原型对象。因此,不用写_.each(_trait, function (method, name) {_class.prototype[name] = method;}); 之类的Object.assign(_class.prototype, _trait),而是显示了这种方法的真正本质。 ...
    • 2/3 ... 除此之外,Traits 与 Mixins 的不同之处在于前者提供了在应用/组合时解决(命名)冲突的操作/功能,而后者确实覆盖了任何之前在那里。 JavaScript 中良好的 trait 实现与库和框架无关。因此,理想情况下,它被实现为领域特定语言,可为对象组合甚至状态处理提供多种工具。 ...
    • 3/3 ...当然,您的解决方案显示了一种可能的方法,即如何通过使用角度来实现基于 Mixin 的组合模块。当然这与 PHP 所提供的也相去甚远。
    猜你喜欢
    • 2017-10-12
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多