2015-12-21 80 views
1
myApp.controller('myController', ['$scope', function($scope) { 
    $scope.a = 0; 
    $scope.find = function() { 
    $scope.a += 1; 
    } 
}]) 

.directive('myLoading', [function() { 

if ($scope.a % 2 === 0) { 
    return { 
     template: "<div>Hi</div>" 
    } 
} else { 
    return { 
     template: '' 
    } 
} 
}]); 

我试图操纵DOM每次我从一个按钮接收一个单击事件。这应该会在每次我收到点击时在模板之间进行切换。但是我在控制台日志中收到错误。 $scope is not defined,指令中的一个。

+1

那是因为你还没有在你的指令定义$范围。 – Matheno

回答

5

$控制器内的作用域和指令内的$作用域不是同一个变量。

控制器和指令之间的通信方式很多。例如指令属性的值,但您也可以使用$ broadcast/$ emit或$ rootScope。

More info.

1

你不能直接访问指令工厂函数内部的变量$scope$scope依赖。你可以访问指令link函数中scopescope,但是它取决于scope指令的属性。

你想达到的目标比你想要的要容易得多。

指令

.directive('myLoading', [function() { 
    return { 
     template: '<div ng-if="(a % 2 === 0)">Hi</div>' 
    } 
}]);