在对象中使用Angular $ scope变量

San*_*yak 1 javascript angularjs angularjs-scope

我试着寻找类似于我的类似问题,但无法得到任何问题.请原谅,如果这个问题是重复的并且已经得到解答.

我的HTML有两个输入字段用于名字和姓氏,还有一个按钮:

<body ng-app="myApp" >
  <div ng-controller="myCtrl">
     <input type="text" ng-model="fname"/>
     <input type="text" ng-model="lname"/>
     <input type="button" ng-click="createObj();" value="Clear Scope"/>
     <p>Fname = {{fname}}</p>
     <p>Lname = {{lname}}</p>
 </div>
Run Code Online (Sandbox Code Playgroud)

这是我的JS文件,它具有控制器功能:

var myApp = angular.module("myApp", []);
myApp.controller("myCtrl",function($scope){

   $scope.fname = "sandeep";
   $scope.lname = "nayak";

   $scope.createObj= function(){

     var obj = {fn:$scope.fname, ln: $scope.lname};
     console.log(obj);

     $scope.fname = "";
     $scope.lname = "";

     console.log(obj);

   };


});
Run Code Online (Sandbox Code Playgroud)

createObj方法中,我创建一个包含名字和姓氏的对象,然后清除$ scope.

在清除$ scope之前和之后,我将对象记录两次.但我没有看到任何区别.

为什么对象仍然相同,即使在我清除$ scope之后,因为我在我的对象中引用$ scope?

http://jsfiddle.net/7eo4zcvq/

flo*_*bon 5

这与Angular无关,只与Javascript本身有关.

当你写作

var obj = {fn:$scope.fname, ln: $scope.lname};
Run Code Online (Sandbox Code Playgroud)

$ scope.fname/lname被解析为它们的值,它们是字符串,所以这个对象恰好被初始化为

var obj = {fn:"sandeep", ln:"nayak"};
Run Code Online (Sandbox Code Playgroud)

因此清除范围不会对它产生任何影响:这是因为字符串不像常规对象那样处理,而是像本机类型一样(与数字和布尔值相同).

这种行为的一个更简单的例子是:

var a = "hello";
var b = a;
a = "world";
console.log(a);       // outputs "world"
console.log(b);       // outputs "hello"
console.log(a === b); // outputs false
Run Code Online (Sandbox Code Playgroud)