Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS UI路由器:子/父状态下解析对象之间的双向绑定—;儿童州赢得';t更新_Javascript_Angularjs_Angular Ui Router - Fatal编程技术网

Javascript AngularJS UI路由器:子/父状态下解析对象之间的双向绑定—;儿童州赢得';t更新

Javascript AngularJS UI路由器:子/父状态下解析对象之间的双向绑定—;儿童州赢得';t更新,javascript,angularjs,angular-ui-router,Javascript,Angularjs,Angular Ui Router,我有一个父状态和一个子状态。父状态解析对象。然后,子状态从父状态解析该对象 因为子状态正在从父状态解析对象,所以我希望发生双向绑定。奇怪的是,虽然子状态的更改(即添加属性)会更新父状态中的对象父状态中的对象更改不会影响子状态中已解析的对象,这让我感到惊讶 我知道我可以将父状态中已解析对象的更改$broadcast广播到子状态,但我想了解为什么子状态中的已解析对象不会自动更新 这就是我的工作。母国: .config(function($stateProvider) { $stateProvid

我有一个父状态和一个子状态。父状态解析对象。然后,子状态从父状态解析该对象

因为子状态正在从父状态解析对象,所以我希望发生双向绑定。奇怪的是,虽然子状态的更改(即添加属性)会更新父状态中的对象父状态中的对象更改不会影响子状态中已解析的对象,这让我感到惊讶

我知道我可以将父状态中已解析对象的更改
$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;
       }]
    }
  })
.config(函数($stateProvider){
$stateProvider.state('parent'{
模板:“”
+“母国”
+'修改父状态对象的属性。someProperty:'
+'      '
+“{{object.someProperty}}”
+'    '
+'  ' 
+“包括子州”
+'  ',
控制器:功能($scope){
$scope.object=对象;
},
决心:{
对象:[函数(){
var对象=“”;
object.someProperty='initialValue';
返回对象;
}]
}
})
儿童和国家:

  .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;          
    }        
  });
});
.state('parent.child'{
模板:“”
+“儿童国家”
+'从父状态监视属性,object.someProperty'
+“{{object.someProperty}}”
+'    ',
决心:{
objectFromParent:['object',函数(对象){
返回对象;
}]
},
控制器:函数(objectFromParent){
$scope.objectFromParent=objectFromParent;
}        
});
});
子状态中的
解析
是否仅在实例化时发生?Ie.-一旦子状态从父状态解析对象,它将不再侦听对已解析对象的更改?看起来不应该是这样

PLNKR可能正在窃听我的代码,原因不明:


任何方向或见解都值得赞赏。谢谢大家!

你所有的期望都是正确的。还有一种方法正在发挥作用

最重要的更改是使共享对象成为真实对象(而不是字符串)

主要是:

//var object = '';
var object = {};
这样,
$scope.object
就成为一个引用对象。这意味着,父对象和子对象将共享对该对象的引用。事实上,如果有人愿意改变(增加财产,改变财产),所有人都会知道这个改变。。。因为它们共享对一个对象的引用


检查它

我怀疑这是导致您遇到问题的原因,但我想我应该提到:当您在父状态下解决某个问题时,您不需要在子状态下重新解决它。解析对象可以注入到任何子状态的控制器中,例如,您可以在子状态中删除解析块,只需将
对象
注入到子状态的控制器中即可。感谢您的反馈!事实上,我不知道这不能解决问题,但知道这一点很有帮助:-)太棒了。只是好奇。如果控制器位于不同的文件中怎么办?@PushkarKathuria此类控制器有任何问题吗?我为你创造了一个劫掠者。这有帮助吗?嗯,我面临的问题是,我正在从http请求(promise)获取数据。在控制器端,我将对象设置为连接到vm的对象。这里发生的事情是,点击一个按钮,我打开了一个模式框,它应该会更新底层屏幕上的值。我希望我能让你明白。请帮忙。或者我可以在今天晚些时候分享一杯普朗克酒。@PushkarKathuria我强烈建议。。提出一个问题。如果需要,添加此帖子的链接。我相信你会得到比我更多的观众。。。(相当忙;(这几天)。我确实相信这种方式能给你带来最大的…(普朗克补充了这样的问题…。正如你所建议的,这是必须的)
//var object = '';
var object = {};