繁体   English   中英

在AngularJS中,为什么不能通过简单函数访问$ scope变量?

[英]In AngularJS, why isn't a $scope variable accessible from a simple function?

我的代码如下所示:

angular.module('xyz', [])
    .controller('listController', ['$scope', 
        function($scope) {
            $scope.deliveryOptions = 0;
            var vm = this;

            function doTransaction() {
                console.log('delivery options is ' + vm.$scope.deliveryOptions);
            }
        }
    ]);

console.log(delivery options)内部,它给我一个错误, it is Unable to get property 'deliveryOptions' of undefined or null reference 那么如何访问该变量?

问题是$ scope没有在vm对象上定义。 为了解决这个问题,您应该像这样在$ scope对象上定义所有内容

angular.module('xyz', [])
    .controller('listController', ['$scope', 
        function($scope) {
            $scope.deliveryOptions = 0;

            $scope.doTransaction = function() {
                console.log('delivery options is ' + $scope.deliveryOptions);
            }
        }
    ]);

还是在vm对象上

angular.module('xyz', [])
    .controller('listController', 
        function() {
            var vm = this;
            vm.deliveryOptions = 0;

            vm.doTransaction = function() {
                console.log('delivery options is ' + vm.deliveryOptions);
            }
        }
    );

混合vm和$ scope不是最好的方法

$scopecontroller as ,不能同时使用

主要问题是您将原始的AngularJS 1.x $scope用法与controller as使用vm (意为“视图模型”)的设计模式(从Angular 1.5开始)混合使用。

您需要选择一个,然后您的代码就可以正常工作。

如果将更清洁且错误率较低的vmcontroller as设计模式,则只需使用vm而不是$ scope即可:

angular.module('xyz', [])
    .controller('listController', function() {
        var vm = this
        vm.deliveryOptions = 0
        vm.doTransaction = function() {
            console.log('delivery options is ' + vm.deliveryOptions)
        }
     })

然后在您的视图中,使用vm.doTransaction()调用函数并显示变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM