AngularJS指令$ scope未定义
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AngularJS指令$ scope未定义相关的知识,希望对你有一定的参考价值。
我有以下指令。当我触发open
函数并进入调试器时,我在控制台中收到Uncaught ReferenceError: $scope is not defined(…)
的错误消息。
当$scope.open
未定义时,如何调用$scope
?
app.directive('photo', ['$http', 'modal', function($http, modal) {
return {
replace: true,
templateUrl: '/assets/photo.html',
transclude: false,
scope: {
result: '=',
index: '@'
},
controller: ['$scope', '$http', 'modal', function($scope, $http, modal) {
$scope.prev = $scope.index - 1;
$scope.open = function() {
debugger;
};
}]
}
}]);
这是我的DOM:
<div ng-repeat="r in results" photo result="r" index="$index"></div>
如果我在console.log($scope)
函数之前插入open
,然后再在该函数中的debugger
之前插入,我得到以下结果。左边是在调用open
之前,右边是在调用open
之后。
答案
你在指令定义中注入了$http
和modal
(正如你所做的那样),不需要在控制器函数中,只需执行:
controller: function($scope) {
$scope.prev = $scope.index - 1;
$scope.open = function() {
debugger;
};
}
另一答案
尝试添加在$scope
中使用$scope.open
的语句。当你在$scope
时,Chrome可能已经优化了$scope.open
因为你没有使用它。
$scope.open = function() {
console.log($scope);
debugger; //now you should see $scope.
};
另一答案
这应该工作:
app.directive('photo', ['$http', 'modal', function($http, modal) {
return {
replace: true,
templateUrl: '/assets/photo.html',
transclude: false,
scope: {
result: '=',
index: '@'
},
controller: function($scope, $http, modal) {
$scope.prev = $scope.index - 1;
$scope.open = function() {
debugger;
};
}
}
}]);
另一答案
你需要在顶部定义$ Scope,即: app.directive('photo',['$ http','$ Scope','modal',函数($ http,$ Scope,modal)
它现在可以正常工作。
另一答案
它为我工作
var app = angular.module("moduleTest",[]);
app.directive("testDirective",function(){
return {
restrict: "A",
scope: true,
link: function(scope, element){
//code
//and $scope is scope
}
}
});
以上是关于AngularJS指令$ scope未定义的主要内容,如果未能解决你的问题,请参考以下文章