【发布时间】:2015-05-31 20:37:34
【问题描述】:
我有一个父状态和一个子状态。父状态解析一个对象。然后,子状态从父状态解析该对象。
因为子状态正在从父状态解析对象,所以我预计会发生双向绑定。奇怪的是,虽然子状态发生了变化(即添加属性),但更新了父状态中的对象——父状态中对象的更改并没有影响子状态中已解析的对象,这让我感到惊讶。
我知道我可以 $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;
}]
}
})
和子状态:
.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;
}
});
});
子状态中的resolve 是否仅在实例化时出现?即——一旦子状态从父状态解析对象,它就不再监听解析对象的变化?情况似乎不应该如此。
PLNKR 可能会出错——我的代码由于未知原因无法工作: http://plnkr.co/edit/EjV4TtSIP6HpVMG0oanL?p=preview
感谢任何方向或见解。谢谢!
【问题讨论】:
-
我怀疑这会导致您遇到的问题,但我想我会提到:当您在父状态下解决某些问题时,您不需要在子状态下重新解决它。解析的对象可以注入到任何子状态的控制器中,例如您可以删除子状态中的解析块,只需将
object注入到子状态的控制器中。 -
感谢您的反馈!我实际上不知道 - 不能解决问题,但知道会有所帮助:-)
标签: javascript angularjs angular-ui-router