为什么建议不要在AngularJS中使用$ scope.attribute但是$ scope.model.attribute?

时间:2014-04-16 15:02:38

标签: javascript angularjs prototypal-inheritance

阅读ng-book,有一部分建议在使用$scope时,尝试将属性包装在另一个属性中,如下所示:

$scope.model.attribute代替$scope.attribute

根据作者的说法,如果我们有嵌套控制器,就好像我们不这样做那样,如果我们要更改子$ scope中的值,它将不会取决于父级。

我认为我不明白为什么这有必要?原型继承方面$scope.model.attribute$scope.attribute之间有什么区别?

1 个答案:

答案 0 :(得分:3)

请看这个用来说明这个问题的小提琴。

http://jsfiddle.net/nicolasmoise/X9KYU/4/

HTML:

<body ng-app="myApp">
<div ng-controller="parentCtrl">
    <!--{{message}}<input type="text" ng-model="message">-->
    {{obj.message}}<input type="text" ng-model="obj.message">
    <div ng-controller="childCtrl">
        <!--{{message}}<input type="text" ng-model="message">-->        
        {{obj.message}}<input type="text" ng-model="obj.message">
    </div>
</div>    
</body>

控制器:

//Switch between commented/uncommented

angular.module('myApp', [])
.controller('parentCtrl', ['$scope', function($scope){
    //$scope.message="Hello";
    $scope.obj={message:"Hello"}
}])
.controller('childCtrl', ['$scope', function($scope){
}]);

如果您使用“原始”($scope.message),则从子控制器编辑它不会更改父控制器中的值。

正如你所说,这一切都与Javascript的原型继承有关