Angularjs Angular.js。使用服务时双向数据绑定中断
问题是,当我在字段中输入文本时,SecondName属性没有更新 请在JSFIDLE上查看以下代码: HTML:Angularjs Angular.js。使用服务时双向数据绑定中断,angularjs,Angularjs,问题是,当我在字段中输入文本时,SecondName属性没有更新 请在JSFIDLE上查看以下代码: HTML: 它不会像你认为的那样工作。这一行: obj.SecondName = obj.FirstName; 创建一个新属性SecondName,该属性的值等于FirstName。但是,由于这两个属性都是基本类型(String),因此它们之间没有连接。换句话说,obj.SecondName不引用obj.FirstName 你有两个选择 选项1。(坏)在FirstName更改上设置额外的监视程
它不会像你认为的那样工作。这一行:
obj.SecondName = obj.FirstName;
创建一个新属性SecondName
,该属性的值等于FirstName
。但是,由于这两个属性都是基本类型(String
),因此它们之间没有连接。换句话说,obj.SecondName
不引用obj.FirstName
你有两个选择
选项1。(坏)在FirstName
更改上设置额外的监视程序,一旦发生更改,分别更新SecondName
$scope.$watch('Data.FirstName', function() { Data.SecondName = Data.FirstName; });
选项2。不要引入额外的观察者并更改您的体系结构。例如,在第二个控制器中也使用FirstName
,因为它们应该相等
由于嵌套的作用域,这是一个范围问题。请查看此网站以获得明确的解释:。在嵌套作用域部分中有几种不同的解决方案可以解决您的问题。代码的问题在于第一个控制器只是在更改
数据的值。FirstName
对象,因此,这些更改不会反映在第二个控制器上,因为SecondName的值在第一个控制器中初始化后不会更改。因此,您必须设置数据。SecondName
在您的数据中也是如此
或者,您也可以这样做
<div>
<input type="text" ng-model="Data.FirstName"><!-- Input entered here -->
<br>FirstName is : <strong>{{Data.SecondName=Data.FirstName}}</strong><!-- Successfully updates here -->
</div>
名字是:{{Data.SecondName=Data.FirstName}
您也可以使用指令来实现此功能,但我想您只是在寻找上述解决方案
干杯 谢谢PSL,它帮助了我。更改代码使其没有嵌套作用域是没有帮助的。无论如何,谢谢你的文章,它很有趣。谢谢你,这似乎很有效!我必须使用'bad'选项,因为实际上在我的代码中'SecondName'属性改变了,并且不等于'FirstName'。
$scope.$watch('Data.FirstName', function() { Data.SecondName = Data.FirstName; });
<div>
<input type="text" ng-model="Data.FirstName"><!-- Input entered here -->
<br>FirstName is : <strong>{{Data.SecondName=Data.FirstName}}</strong><!-- Successfully updates here -->
</div>