angularjs 子父controller交互问题
2015-12-07 16:33
627 查看
关于angularjs,$scope 交互时最近遇到几个问题
对$scope直接进行赋值
<div ng-controller="SomeCtrl">
{{ someBareValue }}
<button ng-click="someAction()">Communicate </button>
<div ng-controller="ChildCtrl">
{{ someBareValue }}
<button ng-click="childAction()">Communicate </button>
</div>
</div>
<script>
angular.module('myApp', [])
.controller('SomeCtrl', function($scope) {
// anti-pattern, bare value
$scope.someBareValue = 'hello computer';
// set actions on $scope itself, this is okay
$scope.someAction = function() {
$scope.someBareValue = 'hello human, from parent';
};
})
.controller('ChildCtrl', function($scope) {
$scope.childAction = function() {
$scope.someBareValue = 'hello human, from child';
};
});
</script>
效果:子controller只能改变子的,父的可以两个一起变,但是子的改变过后父的就无法再另其改变
对$scope进行对象的赋值引用:
<div ng-controller="SomeCtrl">
{{ someModel.someValue }}
<button ng-click="someAction()">Communicate to child</button>
<div ng-controller="ChildCtrl">
{{ someModel.someValue }}
<button ng-click="childAction()">Communicate to parent</button>
</div>
</div>
<script>
angular.module('myApp', [])
.controller('SomeCtrl', function($scope) {
// best practice, always use a model
$scope.someModel = {
someValue: 'hello computer'
}
$scope.someAction = function() {
$scope.someModel.someValue = 'hello human, from parent';
};
})
.controller('ChildCtrl', function($scope) {
$scope.childAction = function() {
$scope.someModel.someValue = 'hello human, from child';
};
});
</script>效果:这个就是两个都变。。。
总结:在js中,对象,数组,函数是一个引用,类似浅拷贝。但是数值,字符串是值赋值。如果将模型对象的某个属性设置为字符串,它会通过引用进行共享,因此在子的改变也会改变父的。
对$scope直接进行赋值
<div ng-controller="SomeCtrl">
{{ someBareValue }}
<button ng-click="someAction()">Communicate </button>
<div ng-controller="ChildCtrl">
{{ someBareValue }}
<button ng-click="childAction()">Communicate </button>
</div>
</div>
<script>
angular.module('myApp', [])
.controller('SomeCtrl', function($scope) {
// anti-pattern, bare value
$scope.someBareValue = 'hello computer';
// set actions on $scope itself, this is okay
$scope.someAction = function() {
$scope.someBareValue = 'hello human, from parent';
};
})
.controller('ChildCtrl', function($scope) {
$scope.childAction = function() {
$scope.someBareValue = 'hello human, from child';
};
});
</script>
效果:子controller只能改变子的,父的可以两个一起变,但是子的改变过后父的就无法再另其改变
对$scope进行对象的赋值引用:
<div ng-controller="SomeCtrl">
{{ someModel.someValue }}
<button ng-click="someAction()">Communicate to child</button>
<div ng-controller="ChildCtrl">
{{ someModel.someValue }}
<button ng-click="childAction()">Communicate to parent</button>
</div>
</div>
<script>
angular.module('myApp', [])
.controller('SomeCtrl', function($scope) {
// best practice, always use a model
$scope.someModel = {
someValue: 'hello computer'
}
$scope.someAction = function() {
$scope.someModel.someValue = 'hello human, from parent';
};
})
.controller('ChildCtrl', function($scope) {
$scope.childAction = function() {
$scope.someModel.someValue = 'hello human, from child';
};
});
</script>效果:这个就是两个都变。。。
总结:在js中,对象,数组,函数是一个引用,类似浅拷贝。但是数值,字符串是值赋值。如果将模型对象的某个属性设置为字符串,它会通过引用进行共享,因此在子的改变也会改变父的。
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 异步流程控制:7 行代码学会 co 模块
- ES6 走马观花(ECMAScript2015 新特性)
- JavaScript拆分字符串时产生空字符的原因
- Canvas 在高清屏下绘制图片变模糊的解决方法
- JavaScript 各种遍历方式详解
- call/apply/bind 的理解与实例分享
- 如何创建对象以及jQuery中创建对象的方式
- IE8开发人员工具教程(二)
- 在flex中执行一个javascript方法的简单方式