AngularJS - 无法将范围值设置为模板

时间:2014-12-30 12:56:39

标签: javascript angularjs scope angularjs-scope

我有以下功能:

$scope.setDetailToScope = function(data) {
    $scope.$apply(function() {
        //$scope.order = data;
        $rootScope.order = data;
        setTimeout(function() {
            $scope.$apply(function() {
                //wrapped this within $apply
                $scope.order = data[0];
                console.log('message:' + $scope.order);
                console.log($scope.order);
            });
        }, 100);
    });
};  

console.log($scope.order); 

给出了已设定范围的值。

但我无法在模板中获取这些值。

<!-- DEBUG DIV -->
<div class="debugDiv" ng-show="$root.debugable == true">
 {{columns}}
</div>
<div data-ng-controller="OrdersCtrl" ng-init="initData()"> 
    <div id="orders_grid" >

    </div>
</div>
<!-- GRID TOOLBAR BUTTON TEMPLATE -->
<script id="template" type="text/x-kendo-template">
  <a class="k-button" href="\#/orders/create">Add</a>
</script>

<!-- ORDER DETAIL DIV -->
<div class="container" id="orderDetail" data-ng-controller="OrdersCtrl"  ng-if="'detailSelected == true'" xmlns="http://www.w3.org/1999/html">
    <!-- DEBUG DIV -->
    <div class="debugDiv" ng-show="$root.debugable == true">
      {{order}} <!--NOT WORKING-->
   </div>

如果我试图将值添加到rootscope,它可以工作,但在这种情况下,我无法获得ng-model的值。

我做错了什么?

非常感谢您的帮助。

编辑:

如果我尝试使用$ timeout的解决方案,我得到了console.log($ scope.order);

以下未传递到模板的对象:

_events: ObjectacrCrCode: "interlos"actionName: ht.extend.initarchived: falsebaseStationInfo: ht.extend.initbsc: "bsc1"btsRolloutPlan: "plan1"candidate: "B"costCategory: ht.extend.initcreatedBy: ht.extend.initdirty: falsefacility: ht.extend.initid: 3location: ht.extend.initmilestoneSequence: undefinednetworkType: "Fix"note: "poznamka"orderNumber: 111113orderType: ht.extend.initotherInfo: ht.extend.initparent: function (){return e.apply(n||this,r.concat(h.call(arguments)))}partner: ht.extend.initpersonalInfo: ht.extend.initproject: ht.extend.initpsidCode: "psid1"sapSacIrnCode: "sap1"uid: "924c0278-88d0-4255-b8ac-b004155463fa"warehouseInfo: ht.extend.init__proto__: i

1 个答案:

答案 0 :(得分:0)

我不确定你为什么使用带有范围适用的setTimeout,对我来说使用$timeout更安全,因为它会触发另一个摘要周期,

尝试类似

的内容
$scope.setDetailToScope = function(data) {
    $timeout(funtion(){
        //$rootScope.order = data; try either data or data[0]
        $scope.order = data[0];

    },100);
};  

请注意,调用嵌套的apply方法可能会遇到angularjs摘要周期的一些问题,你可能会收到类似“digest already in progress”的错误,所以要注意它。

注意:

看起来你有一些脏数据,所以试着在数据和范围之间做一个映射

$scope.order ={};
$scope.order.uid = data.uid;
$scope.order.orderNumber = data.orderNumber //and so on
在模板中

尝试类似:

 <div class="debugDiv">
     <p> {{order.uid}} </p>
     <p> {{ order.orderNumber}} </p>
   </div>

这可能有点质朴,但值得尝试一下。