Javascript 在原型中使用角度控制器

Javascript 在原型中使用角度控制器,javascript,angularjs,Javascript,Angularjs,我的问题很简单 可以将角度控制器与原型一起使用吗 'use strict'; var EventController = function(scope, EventModel) { this.scope = scope; this.EventModel = EventModel; }; EventController.prototype = { create: function() { this.scope.create = function(

我的问题很简单

可以将角度控制器与原型一起使用吗

'use strict';
var EventController = function(scope, EventModel) {
    this.scope      = scope;
    this.EventModel = EventModel;
};

EventController.prototype = {
    create: function() {
        this.scope.create = function() {
            this.EventModel.Model.insert()
                .then(function(result) {

                });
        };
    },

    retrieve: function() {
        var that = this;

        this.EventModel.Model.find()
            .then(function(result) {
                that.scope.events = result;

            });
    },

    retrieveOne: function(id) {
        this.EventModel.Model.findOne(id)
            .then(function(result) {
                console.log(result);

            });
    },

    update: function() {
        this.EventModel.Model.update()
            .then(function(result) {

            });
    },

    delete: function() {
        this.EventModel.Model.remove()
            .then(function(result) {

            });
    }
};

module.exports = function(adminApp) {
    adminApp
        .controller('EventController', ['$scope', 'EventModel', function(scope, EventModel) {
            return new EventController(scope, EventModel);

        }]);
};
我正在使用Browserify,这就是为什么我在期末考试中有这个模块

我希望以这种方式使用控制器,并获得方法,就像它是原型中对象的名称一样


我有什么办法可以做到吗?

你绝对可以。这是一个演示,我使用与您类似的代码制作

其神奇之处在于Angular 1.2.0中引入的“控制器为”语法。

演示中有三个按钮。其中一个按照您的要求在控制器本身上使用原型方法,另外两个说明您可以继续使用控制器,因为您可能已经习惯了,方法是在标记中完全使用范围,并在控制器中提供范围方法

Javascript 加成

控制器为:
做一件事!
范围:
i=={{i}
使用范围的扩展方法
j=={{j}

太棒了!我可以问更多的信息吗?这在幕后是如何运作的?我不了解范围。j*=2;这是一种非常人为的方式来说明两点。该方法工作的事实表明,您可以添加范围方法(注意,它不是通过
ctrl
调用的)。实际
范围j*=2行显示您可以像正常操作一样操作范围变量(具体来说,就是将
j
乘以2)。所有这些都与您最初的问题无关,但只是表明
Controller as
语法为您提供了使用
范围
的灵活性,就像在1.2之前一样。对您来说,重要的部分是
ng controller=“TestController as ctrl”
ng click=“ctrl.doAThing()”
'use strict';
var TestController = function(scope) {
    this.scope      = scope;
};

TestController.prototype = {
    doAThing: function() {
        alert('This is a thing');
    }
};

angular.module('testApp', [])
    .controller('TestController', ['$scope', function(scope) {
        if(typeof(scope.extension) === 'undefined')
            scope.extension = function() {
                scope.j *= 2;
            };
        return new TestController(scope);
    }]);
<div ng-app="testApp" ng-controller="TestController as ctrl" ng-init="i = 0; j = 1;">
    <h1>Controller as:</h1>
    <button ng-click="ctrl.doAThing()">Do a thing!</button>
    <h1>Scope:</h1>
    <button ng-click="i=i+1">i == {{i}}</button>
    <h1>Extension method using scope</h1>
    <button ng-click="extension()">j == {{j}}</button>
</div>