如何使这个简单的 AngularJS 1.0.2 ng-options 示例在 1.4.2+ 中工作?

How to make this simple AngularJS 1.0.2 ng-options example work in 1.4.2+?

see also JSFIDDLE demo

在此示例中,我从另一个对象中的对象数组填充 select 选项。 selected 值也保存在此对象中:

function QuarterController($scope) {
    $scope.MyData = {
        Quarter: 2,
        QuarterArray: [{
            'value': 1,
            'text': 'Q1'
        }, {
            'value': 2,
            'text': 'Q2'
        }, {
            'value': 3,
            'text': 'Q3'
        }, {
            'value': 4,
            'text': 'Q4'
        }],
    };
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.min.js"></script>
<div ng-app>
     <h2>AngularJS ng-options Demo</h2>
    <p>Works in AngularJS 1.0.2 but not in 1.4.2.</p>
    <div ng-controller="QuarterController">
        <select name="quarter" ng-model="MyData.Quarter" ng-options="obj.value as obj.text for obj in MyData.QuarterArray">
            <option value="">Please select...</option>
        </select>
        <div>Quarter Selected: {{MyData.Quarter}}</div>
    </div>
    <p>What must I change to make this work in the latest AngularJS 1.*?</p>
</div>

如果您将 AngularJS 库从 1.0.2 更改为 1.4.2,它将停止工作。我必须怎么做才能在最新的 1.4.* 或 1.5.* 版本中运行此功能?

(感谢 BruteCode 这个例子的来源)

AngularJS 1.3 默认禁用全局变量作为控制器。你有两个选择。对于它们两者,您必须将 ng-app 模块的名称添加到您的 html 文件中:

    <div ng-app="myApp">
    </div>
  1. 要么使用新语法

    将此添加到您的 js 文件的底部

    angular.module('myApp', []).controller('QuarterController', QuarterController);
    

    工作fiddle:https://jsfiddle.net/hp97e5ek/8/

  2. 或启用该功能

    angular.module('myApp', []).config($controllerProvider) {
        $controllerProvider.allowGlobals();
    });
    

    工作fiddle:https://jsfiddle.net/hp97e5ek/9/