nik*_*ong 3 javascript angularjs angular-ui-router
我有一个父州和一个子州.父状态解析一个对象.然后,子状态从父状态解析该对象.
因为子状态是从父状态解析对象,所以我希望发生双向绑定.奇怪的是,虽然从子状态改变(即添加属性),更新父状态中的对象 - 父状态中对象的更改不会影响子状态中的已解析对象,这让我感到惊讶.
我知道我可以$broadcast将父状态中已解析的对象更改为子状态,但我想了解为什么子状态中的已解析对象未自动更新.
这是我正在使用的.家长州:
.config(function($stateProvider) {
$stateProvider.state('parent', {
template: ''
+' <div>Parent State</div>'
+' <div>Modify property on parent state, object.someProperty:'
+' <input ng-model="object.someProperty">'
+' {{object.someProperty}}'
+' </div>'
+' </div>'
+' Include Child State'
+' <ui-view></ui-view>',
controller: function($scope) {
$scope.object = object;
},
resolve: {
object: [function() {
var object = '';
object.someProperty = 'initialValue';
return object;
}]
}
})
Run Code Online (Sandbox Code Playgroud)
和孩子状态:
.state('parent.child', {
template: ''
+' <div>Child State</div>'
+' <div>Watch property from parent state, object.someProperty'
+' {{object.someProperty}}'
+' </div>',
resolve: {
objectFromParent: ['object', function(object) {
return object;
}]
},
controller: function(objectFromParent) {
$scope.objectFromParent = objectFromParent;
}
});
});
Run Code Online (Sandbox Code Playgroud)
是否resolve在孩子的状态只在实例发生的呢?即,一旦子状态从父状态解析对象,它不再侦听已解析对象的更改?似乎不应该是这种情况.
PLNKR可能会漏掉 - 我的代码不会因为未知原因而起作用:http://plnkr.co/edit/EjV4TtSIP6HpVMG0oanL?p = preview
任何方向或见解都表示赞赏.谢谢!
你所有的期望都是正确的.并且有一点调整的plunker正在工作.
最重要的变化是使共享对象成为真实对象(而不是字符串)
$stateProvider.state('parent', {
url: '/parent',
template: ...,
controller: function($scope, object) {
$scope.object = object;
},
resolve: {
object: [function() {
//var object = '';
var object = {};
object.someProperty = 'initialValue';
return object;
}]
}
Run Code Online (Sandbox Code Playgroud)
主要是线条:
//var object = '';
var object = {};
Run Code Online (Sandbox Code Playgroud)
这样,就$scope.object成了参考对象.这意味着,父母和孩子将共享对该对象的引用.并且在契约中 - 如果有人会改变它(添加属性,更改该属性) - 所有人都将知道更改...因为他们共享对一个对象的引用
检查它在这里
| 归档时间: |
|
| 查看次数: |
2414 次 |
| 最近记录: |