2015-12-21 119 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>' 
    } 
}]);