1

我有这些文件:不能绑定范围内的变量在angularjs

的index.html:

<!DOCTYPE html> 
<html> 
<head> 
    <title>Gestore Anagrafica</title> 
</head> 
<body> 
    <div> 
     <h3>Insert new person</h3> 
     <div ng-app="Person" ng-controller="PersonController"> 
      First Name: <input type="text" ng-model="firstName"><br> 
      Last Name: <input type="text" ng-model="lastName"><br> 
      Age: <input type="number" ng-model="age"><br> 
      <br> 
      Full Name: {{fullName()}} <br> 
      Is major: {{isMajor()}} <br> 
      <button ng-click="add()">Add Person</button> 
     </div> 
    </div> 
    <script type="text/javascript" src="js/angular.js"></script> 
    <script type="text/javascript" src="js/RegistryService.js"></script> 
    <script type="text/javascript" src="js/PersonController.js"></script> 
</body> 
</html> 

JS/RegistryService.js:

angular.module('RegistryService', []). 

service('registry', function() 
{ 
    this.people = []; 

    this.add = function(person) 
    { 
     people.push(person); 
    } 
}); 

JS/PersonController.js:

var app = angular.module('Person', ['RegistryService']); 
app.controller('PersonController',['registry', function($scope, registry) { 
    $scope.firstName = "testName"; 
    $scope.lastName = ""; 
    $scope.age = 20; 

    $scope.isMajor = function() 
    { 
     return $scope.age > 18; 
    }; 

    $scope.add = function() 
    { 
     registry.add({ 'firstName': $scope.firstName, 
         'lastName': $scope.lastName, 
         'age': $scope.age}); 

    }; 

    $scope.fullName = function() 
    { 
     return $scope.firstName + " " + $scope.lastName; 
    }; 
}]); 

绑定不会发生:当我更改名称或年龄没有任何反应,而且在开始时输入都是空白的,但我期望在age中看到20和testName。浏览器的控制台显示没有错误。我错过了什么吗?

约束条件:服务'RegistryService'必须位于另一个文件中。

问题: 与这两条线

var app = angular.module('Person', ['RegistryService']); 
app.controller('PersonController',['registry', function($scope, registry) { 

我告诉那个叫人模块需要一种叫RegistryService工作,控制器PersonController将使用位于进RegistryService的“注册表”的事(因此,如果我把这里没有定义到RegistryService的东西是一个错误)。函数($ scope,registry)是控制器的构造函数,它使用全局变量$ scope和从'RegistryService'取得的变量注册表。我对依赖注入的整体理解是否良好?

回答

2

您需要描述$scope注射过,因为你希望它在你的控制器功能作为第一个参数可用:

var app = angular.module('Person', ['RegistryService']); 
app.controller('PersonController', ['$scope', 'registry', function($scope, registry) { }]); 
1

你没有注入$范围适当

app.controller('PersonController',['$scope', 'registry', function($scope, registry) {