我试图通过指令评估变量。如何将函数内部的变量从控制器传递到指令链接?我能够在全局范围内传递它,但如果在函数内部设置了变量,则表示未定义。我也试过rootScope,但要知道。
控制器
$scope.checkForCall = function(){
$http({
url: $locationProvider + 'broadcast_call',
method: "GET"
}).success(function (data){
if(data != 'none'){
$scope.ccards = data.broadcast;
$scope.hasData = 1;
} else {
$scope.hasData = 0;
}
});
}
我的指示
app.directive('cards', function($timeout,$interval){
return{
restrict: 'EAC',
template: '<h1>NOT FOUND</h1>',
link: function($scope){
if($scope.hasData == 1){ // UNDEFINE
console.log("Has data")
}else{
console.log("not found")
}
}
};
});
答案 0 :(得分:1)
因为您使用来自$ http .success的数据,所以它是异步更改。这意味着scope.hasData
首先是未定义的,然后在以后更改为0或1。
对于您的情况,您可以在指令中设置一个观察者,以便它在检测到更改时可以执行某些操作。
link: function (scope, element, attrs){ // fix this line as suggested by other poster
scope.$watch(function(){
return scope.hasData;
},
function() {
if(scope.hasData == 1){
console.log("Has data");
}
else if(scope.hasData == 0){
console.log("not found");
}
else {
console.log("not ready yet");
}
});
}
答案 1 :(得分:0)
你可以这样做。
示例html:
<h1 cards dataTwoWayBinding="hasData">
JS -
指令
app.directive('cards', function($timeout,$interval){
return{
restrict: 'EAC',
scope : {
dataTwoWayBinding:'=dataTwoWayBinding',
}
template: '<h1>NOT FOUND</h1>',
link: function($scope){
if(dataTwoWayBinding.data==1){
//code
}else{
//code
}
}
};
});
CONTROLLER -
$scope.checkForCall = function(){
$http({
url: $locationProvider + 'broadcast_call',
method: "GET"
}).success(function (data){
$scope.hasData = {};
if(data != 'none'){
$scope.ccards = data.broadcast;
$scope.hasData.data = 1;
} else {
$scope.hasData.data = 0;
}
});
}
我没有测试过代码。如果有任何问题,请告诉我。