首页 > 解决方案 > AngularJS 文档教程中关于 $controller 服务的问题

问题描述

此代码来自https://docs.angularjs.org/tutorial/step_02。我只是想知道为什么 scope.phones.length 属性是 3 而不是 0,因为 scope 是一个空对象。我不确定这条线在做什么:

var ctrl = $controller('PhoneListController', {$scope: scope});

看起来它将控制器中的 $scope 设置为空范围对象。

describe('PhoneListController', function() {

  beforeEach(module('phonecatApp'));

  it('should create a `phones` model with 3 phones', inject(function($controller) {
    var scope = {};
    var ctrl = $controller('PhoneListController', {$scope: scope});

    expect(scope.phones.length).toBe(3);
  }));

});

标签: angularjsangularjs-controller

解决方案


在这里,您创建具有预定义范围的控制器

var scope = {};
var ctrl = $controller('PhoneListController', {$scope: scope});

当控制器启动时,它的代码如下:

$scope.phones = [...]

因此,当它执行时,它会放入带有 3 个项目的“电话”数组。

您可以尝试使用它并将一些预定义的值放入范围:

var scope = {foo: 'bar', phones: [1,2,3]};
var ctrl = $controller('PhoneListController', {$scope: scope});
phonecatApp.controller('PhoneListController', function PhoneListController($scope) {
  console.log(foo) // 'bar'
  console.log(phones) // [1,2,3]

  $scope.phones = [
   {name: 'Nexus S'}
  ]

  console.log(phones) // [{name: 'Nexus S'}] here will be an array what we just defined to this property

推荐阅读