2013-10-31 26 views
0
创建在$范围explicite对象

我有一个关于Angular.js的$范围依赖注入为什么需要Angular.js

但首先我要告诉你,我创建了两个例子,

第一诸多疑问例如:如下,我在这里表中的搜索目前员工 代码如下,

<!DOCTYPE html> 
<html ng-app="EmpApp"> 
    <head> 
     <title>Plain Template</title>  
     <script type="text/javascript" src="D:/RahulShivsharan/Installers/AngularJS/angular.js"></script> 
    <script type="text/javascript"> 
      var empApp = angular.module("EmpApp",[]); 

     empApp.controller("empCtrl",function($scope){ 
      $scope.employees = [ 
       { 
        "name" : "Manoj Bhandgar", 
        "age" : 23, 
        "profession" : "Computer Engineer", 
        "salary" : 30000 
       }, 
       { 
        "name" : "Ajith Murgadoss", 
        "age" : 33, 
        "profession" : "Mechanical Engineer", 
        "salary" : 60000 
       }, 
       { 
        "name" : "Swati Nandgaokar", 
        "age" : 28, 
        "profession" : "Electrical Engineer", 
        "salary" : 45000 
       }, 
       { 
        "name" : "Fahim Ansari", 
        "age" : 49, 
        "profession" : "Advertising", 
        "salary" : 90000 
       } 
      ];    
     }); 

    </script> 
</head> 
<body ng-controller="empCtrl">  
    <table> 
     <tr> 
      <td align="right">Search Employee :</td> 
      <td><input type="text" ng-model="query"></td>    
     </tr>      
    </table> 
    <hr /> 
    <table> 
     <tr> 
      <th>Name</th> 
      <th>Age</th> 
      <th>Profession</th> 
      <th>Salary</th> 
     </tr> 
     <tr ng-repeat="emp in employees | filter: query"> 
      <td>{{emp.name}}</td> 
      <td>{{emp.age}}</td> 
      <td>{{emp.profession}}</td> 
      <td>{{emp.salary}}</td> 
     </tr> 
    </table> 
</body> 

第二个例子: 现在,在这里,我正在寻找取决于搜索类型的员工,代码如下,

<!DOCTYPE html> 
<html ng-app="EmpApp"> 
<head> 
    <title>Plain Template</title>  
    <script type="text/javascript" src="D:/Rahul Shivsharan/Installers/AngularJS/angular.js"></script> 
    <script type="text/javascript"> 
     var empApp = angular.module("EmpApp",[]); 

     empApp.controller("empCtrl",function($scope){ 
      $scope.employees = [ 
       { 
        "name" : "Manoj Bhandgar", 
        "age" : 23, 
        "profession" : "Computer Engineer", 
        "salary" : 30000 
       }, 
       { 
        "name" : "Ajith Murgadoss", 
        "age" : 33, 
        "profession" : "Mechanical Engineer", 
        "salary" : 60000 
       }, 
       { 
        "name" : "Swati Nandgaokar", 
        "age" : 28, 
        "profession" : "Electrical Engineer", 
        "salary" : 45000 
       }, 
       { 
        "name" : "Fahim Ansari", 
        "age" : 49, 
        "profession" : "Advertising", 
        "salary" : 90000 
       } 
      ]; 
      $scope.prop = {}; 
      $scope.query = {}; 
     }); 

    </script> 
</head> 
<body ng-controller="empCtrl">  
    <table> 
     <tr> 
      <td align="right">Search Employee :</td> 
      <td><input type="text" ng-model="query[prop]"></td>    
     </tr>   
     <tr> 
      <td align="right">Search By :</td> 
      <td> 
       <select ng-model="prop"> 
        <option value="$">ALL</option> 
        <option value="name">Name</option> 
        <option value="age">Age</option> 
        <option value="profession">Profession</option> 
        <option value="salary">Salary</option> 
       </select> 
      </td> 
     </tr> 
    </table> 
    <hr /> 
    <table> 
     <tr> 
      <th>Name</th> 
      <th>Age</th> 
      <th>Profession</th> 
      <th>Salary</th> 
     </tr> 
     <tr ng-repeat="emp in employees | filter: query"> 
      <td>{{emp.name}}</td> 
      <td>{{emp.age}}</td> 
      <td>{{emp.profession}}</td> 
      <td>{{emp.salary}}</td> 
     </tr> 
    </table> 
</body> 

在上述两个我有一些问题的情况下,

在第一个例子

我已经创建了“查询“为ng模型,但没有明确添加到$ scope,为什么?

但在第二个例子中,我在$ scope中添加了“query”和“prop”,为什么?

并且都在这种情况下过滤:查询不过滤:查询[prop],为什么?

我明白道具用于保存值“name”,..等,而query.name或query.salary应该是这种情况,而不是它在angular.js代码下的工作方式。

我希望有一个很好的解释,如果它在编译时发现他们的标记

回答

0

角度会自动创建(链接)$scope性能。

因此,在您的第一个示例中,input上的ng-model设置为queryquery将自动添加到范围。所以,没有必要明确地添加它。但是,明确地添加它是很好的(如果你想的话)。但是,你可能只是初始化它为空,所以没有太多的价值(除非你有一个值绑定)。

在第二个例子,它使用的是featurefilter的:

对象:一个图案对象可用于在由阵列包含 对象过滤特定的属性。例如{名称:“M”,电话:“1”} 谓词将返回包含属性名称为 的项目数组,其中包含“M”和属性手机包含“1”。可以使用特殊属性 name $(如在{$:“text”}中)接受与对象的任何 属性匹配。这相当于简单的子串 与上面描述的字符串匹配。

因此,有必要将查询初始化为一个对象。然后,在标记内部,使用query[prop]动态地将名为prop的值的属性添加到查询对象。这允许过滤器看起来像{ valueOfProp: "inputValue"}。如果您尝试在第二个示例中动态添加属性以进行查询,而不进行初始化,则该对象将不确定并失败。因此,我们必须初始化至少一个空的对象。

希望这会有所帮助。