$ Scope不适用于子页面

时间:2016-03-17 09:38:53

标签: angularjs angularjs-scope

这是我的控制者,



.state('tabs.urunler',{
		url:'/urunler',
		views:{
			'urunler-tab':{
				templateUrl:'pages/urunler.html',
        controller:'MyCtrl'
			}
		}
	})
  .state('tabs.detail',{
    url:'/urunler/:aId',
    views:{
      'urunler-tab' : {
        templateUrl:'pages/urunlerDetail.html',
        controller : 'MyCtrl'
      }
    }
  })




这是POST方法。



$http({
          url : apiAddress + 'getUrunler',
          method : 'POST',
          data : {type}
        }).then(function successCallback(response){

            $scope.urunler = response.data;
            console.log($scope.urunler);
        },function errorCallback(response){
          console.log("error");
        });




这是我的urunDetails.html



<ion-item ng-repeat="urun in urunler">
                {{urun.title}}
                <div class="list">
                	{{urun.brand}}
                    <a class="item item-thumbnail-left">
                        <img src ="{{urun.picture}}">
                        <h2>{{urun.brand}}</h2>
                        <p>{{urun.title}}</p>
                    </a>
                </div> 
&#13;
&#13;
&#13;

这是Urun.html

&#13;
&#13;
 <ion-item ng-repeat="urun in urunler">
                <div class="list">

                    <a class="item item-thumbnail-left" ng-click="changeUrun('Alix Avien')" href="#/tab/urunler/{{urun.title}}">
                        <img src ="{{urun.picture}}">
                        <h2>{{urun.brand}}</h2>
                        <p>{{urun.title}}</p>
                    </a>
                </div>
                
           </ion-item>
&#13;
&#13;
&#13;

问题是,我可以在Urun.html中找到{{urun}},但是当我转到urun.html的子页面urundetails.html时,$ scope不能正常工作:/。通过编写console.log(),我在到达urunDetails.html后查看了响应数据;数据即将到来,但我无法在urunDetails.html页面上看到数据。感谢帮助 !!

2 个答案:

答案 0 :(得分:0)

此问题是因为您将数据绑定到角度范围摘要周期之外的范围变量。对于此方案,您必须手动触发摘要周期。

没有。手动触发摘要周期的方法。

我建议您在$timeout(function(){}, 0);之后使用$scope.urunler = response.data。如果已经存在任何摘要周期,这将基本上通过处理任何冲突来再次触发摘要周期。

答案 1 :(得分:0)

您的两个状态使用相同的控制器,但每个控制器实例似乎都有自己的$ scope。

我在这个plunkr中尝试了这个:https://plnkr.co/edit/qGO3pIDHezym71l7jygU?p=preview

angular.module('myApp', []);

angular.module('myApp').controller('ctrl1', ctrl1);


ctrl1.$inject = ['$scope'];
function ctrl1($scope){
  $scope.test = 'Something';

  $scope.change = function(){
    $scope.test = 'Something else';
  }
}

  <body ng-app="myApp">
    <div ng-controller="ctrl1">
      <p>
        {{test}}
      </p>
      <button ng-click="change()">Click me!</button>
    </div>
    <div ng-controller="ctrl1">
      <p>
        {{test}}
      </p>
    </div>
  </body>

&#39;变化&#39; function仅更改调用它的实例中的scope变量。我最好的猜测就是在你的情况下发生了类似的情况。

您可能希望使用某种服务为控制器提供正确的数据。

也许这可以帮助您解决问题,但这只是我最好的猜测。遗憾的是,我无法真正了解您要提供的代码示例。