仅通过引用绑定到服务属性?

时间:2014-05-17 18:59:37

标签: javascript angularjs

考虑一项服务:

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">

当通过用户输入在视图中更新这些值时,我的服务将仅显示对该对象所做的更改,而字符串属性保持为空。

我是否正确地假设这是由于对象是通过引用绑定而字符串不是?

2 个答案:

答案 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}}。