2015-06-21 31 views
2

我有一个指令,它确实HTTP请求,返回数据和改变参数的值,指令变化并不反映我的网页控制器上

的问题是,在指令控制器返回的数据反映HTML,但不反映在页面控制器上! 我尝试添加scope.apply(),但我有消化周期已经运行的错误..

你能不能指点

JS

app.directive('customDirective', function() { 
    return { 
     restrict: 'E', 
      scope : { 
       pObject  : "=", 
       url   : "@" 
      } , 
     replace  : true,     
     controller : ['$scope','$element', '$http', function($scope, $element, $http) { 

      function requestData() { 
       urlParams = []; 
       urlParams['x'] = parseInt($scope.pageObj.x); 
       urlParams['y'] = parseInt($scope.pageObj.y); 

       $http.get($scope.url,{ params : urlParams}) 
        .success(function (data) { 
         if (typeof data.data !=='undefined' && data.data.length > 0) { 
          $scope.pObject.data = data.data; 
          $scope.pObject.x = data.y; 
          $scope.pObject.y = data.y; 
         } 
        }); 
      } 

      if (typeof $scope.pObject.data !== 'undefined' && $scope.pObject.data.length==0) { 
       requestData(); 
      }    
} 
}); 
+0

当你在'directive'中声明'scope:{...}'时,控制器中的'$ scope'将变成一个**隔离范围**。因此,您的页面控制器无法在**隔离范围**中访问该变量。我更喜欢在你的指令控制器中注入'$ attr',然后从$ attr'获得变量'pObject'和'url'。 –

+0

@StevenWeng“=”意味着绑定:)即我的变量必须更新控制器..我不是说的指令基础,,,我想要一个孤立的范围,我想添加参数作为本地范围属性.. – sisimh

回答

-1

剂量的指令有pObject属性,此属性指向页面控制器作用域上的属性。例如:

<custom-directive p-object="controller Property Here"></custom-directive> 

请关注我如何在指令中添加pObject属性。有关为什么我这样写的更多信息。请阅读标准化部分和在角度文档中分离指令的范围。 Creating Custom Directives

+0

这是不作为答案的答案不能基于假设,我打电话给我的指示错误...如果你怀疑你可以问我添加代码...无论如何,我打电话与正常化,并充分意识到事实上,它是孤立的范围..我添加本地范围属性,我希望我的对象是两种方式的约束 – sisimh

+0

我很抱歉。那么你可以用完整的代码修改你的问题,或者创建一个plunker并提供链接? – Ali

相关问题