考虑一项服务:
app.service('myService',function(){
this.strProp = '';
this.objProp = {
content: ''
}
})
还有一个控制器:
app.controller('myCtrl',function($scope,myService){
$scope.str = myService.strProp;
$scope.obj = myService.objProp;
})
还要考虑绑定两个范围属性的标记
<input type="text" ng-model="str">
<input type="text" ng-model="obj.content">
当通过用户输入在视图中更新这些值时,我的服务将仅显示对该对象所做的更改,而字符串属性保持为空。
我是否正确地假设这是由于对象是通过引用绑定而字符串不是?
答案 0 :(得分:4)
多数是正确的,在您的示例中strProp
受到值的约束。
传入字符串或数字等基本类型变量时, 值按值传递。这意味着任何改变 函数中的变量与任何东西完全分开 这发生在函数之外。
传入一个对象,然后通过引用传入它。在这 case,该对象的任何属性都可以在函数中访问。
所以,你可能需要改变这样的代码:
$scope.someProp = myService;
然后将其传递到您的视图中:
<input type="text" ng-model="someProp.strProp">
<input type="text" ng-model="someProp.objProp.content">
答案 1 :(得分:1)
根据O'REILLY Angularjs
一书,我们应始终使用Object
代替primitives
来包含您的数据。
虽然这个
primitive-style model
在简单的情况下工作,但对于大多数应用程序,您需要创建一个模型对象来包含您的数据,创建一个模型对象将防止可能由{{{}中的原型继承引起的意外行为1}}。