在AngularJS 1.3中使用Controller作为vm语法启动按钮

在AngularJS 1.3中使用Controller作为vm语法启动按钮,angularjs,angularjs-scope,Angularjs,Angularjs Scope,下面的代码表明,我可以使用$scope.interestToggle=语法,但不能使用vm.interestToggle=语法为按钮单击分配侦听器。我试图避免使用$scope。有没有比将侦听器挂起$scope更正确或更好的方法将其放在控制器中 (function () { "use strict"; angular .module("svCodeCamp") .controller( "SessionListCtrl", ['$scope',

下面的代码表明,我可以使用$scope.interestToggle=语法,但不能使用vm.interestToggle=语法为按钮单击分配侦听器。我试图避免使用$scope。有没有比将侦听器挂起$scope更正确或更好的方法将其放在控制器中

(function () {
 "use strict";
  angular
    .module("svCodeCamp")
    .controller( "SessionListCtrl",
                ['$scope',"sessionResource",
                    SessionListCtrl]);

 function SessionListCtrl($scope,sessionResource) {

    var vm = this;

    // WORKS
    $scope.interestToggle = function(item) {
        debugger;
    }

    // DOES NOT WORK
    vm.interestToggle = function(item) {
        debugger;
    }

    //<td>
    //<button ng:click="interestToggle()">Add</button>
    //</td>
1.3不完全支持全局控制器

您应该使用:

angular.module("svCodeCamp").controller("SessionListCtrl", ['$scope',"sessionResource", function() {
    // controller content
]);
或使用此选项重新启用全局控制器:

angular.module('svCodeCamp').config(['$controllerProvider', function($controllerProvider) {
  // this option might be handy for migrating old apps, but please don't use it
  // in new ones!
  $controllerProvider.allowGlobals();
}]);

您是否已将ng controller=SessionListCtrl设置为列表并尝试添加?当我执行您认为最古怪的操作时,我得到错误:[ng:areq]参数“SessionListCtrl”不是函数,未定义古怪,我不明白您的第一个选项与我的选项有什么不同。另外,我还需要使用$scope.interestoggle吗?如果可能的话,我试图避免使用$scope。您使用的是SessionListCtrl作为全局函数。这意味着你正在污染全球名称空间。在angular 1.3中不再允许特定污染。zwacky有没有办法将函数从参数列表中拉出,这样它就不会内联,也不会污染全局名称空间?谢谢你的回答。这对我来说很有意义。最佳实践是拥有一个控制器/服务/指令/。。。每个文件,从angular.modulesvCodeCamp.controller/directive/factory/中的第一个代码块开始。。。。通过这种方式,您可以将控制器注册到angular容器中,而不会在全局名称空间中有外部引用。zwacky还有一个问题。我看到的是生活中多视距角度的函数模式。我认为这解决了污染全局名称空间的问题。符合事实的假设它不污染全球环境,那么1.3中还不允许这样做吗