我有一个指令,它确实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();
}
}
});
当你在'directive'中声明'scope:{...}'时,控制器中的'$ scope'将变成一个**隔离范围**。因此,您的页面控制器无法在**隔离范围**中访问该变量。我更喜欢在你的指令控制器中注入'$ attr',然后从$ attr'获得变量'pObject'和'url'。 –
@StevenWeng“=”意味着绑定:)即我的变量必须更新控制器..我不是说的指令基础,,,我想要一个孤立的范围,我想添加参数作为本地范围属性.. – sisimh