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

use*_*960 5 javascript angularjs

考虑一项服务:

app.service('myService',function(){
    this.strProp = '';
    this.objProp = {
        content: ''
    }
})
Run Code Online (Sandbox Code Playgroud)

和控制器:

app.controller('myCtrl',function($scope,myService){
    $scope.str = myService.strProp;
    $scope.obj = myService.objProp;
})
Run Code Online (Sandbox Code Playgroud)

还要考虑绑定两个范围属性的标记

<input type="text" ng-model="str">
<input type="text" ng-model="obj.content">
Run Code Online (Sandbox Code Playgroud)

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

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

Art*_*ian 4

没错,在你的例子中strProp是受值约束的。

当传入字符串或数字等基本类型变量时,值是按值传入的。这意味着在函数内对该变量的任何更改都与函数外部发生的任何更改完全分开。

然而,传入对象是通过引用传入的。在这种情况下,该对象的任何属性都可以在函数内访问。

因此,可能您必须像这样更改代码:

$scope.someProp = myService;
Run Code Online (Sandbox Code Playgroud)

然后将其传递到您的视图中:

<input type="text" ng-model="someProp.strProp">
<input type="text" ng-model="someProp.objProp.content">
Run Code Online (Sandbox Code Playgroud)