Javascript Angularjs:在控制器中获取元素
我是angularjs的新手,我知道Javascript Angularjs:在控制器中获取元素,javascript,angularjs,Javascript,Angularjs,我是angularjs的新手,我知道$scope表示控制器和视图之间的连接,但是除了寻找class=“ng scope”获取scope元素之外,还有其他方法吗,我的意思是: function someControllerFunc($scope){ $scope.element; } 我知道同一个控制器可以分配给多个作用域,所以这可能是不可能的。您可以将元素传递给控制器,就像作用域一样: function someControllerFunc($scope, $element){
$scope
表示控制器和视图之间的连接,但是除了寻找class=“ng scope”
获取scope元素之外,还有其他方法吗,我的意思是:
function someControllerFunc($scope){
$scope.element;
}
我知道同一个控制器可以分配给多个作用域,所以这可能是不可能的。您可以将元素传递给控制器,就像作用域一样:
function someControllerFunc($scope, $element){
}
$element
是$compileProvider
提供给$controllerProvider
的四个局部变量之一,然后将其提供给$injector
。只有在被要求时,注入器才会在控制器函数中注入局部变量
这四名当地人是:
$scope
$element
$attrs
$transclude
我不知道你的确切意思,但希望能对你有所帮助。
通过此指令,您可以访问控制器内部的DOM元素
这是一个帮助您聚焦控制器内部元素的示例
.directive('scopeElement', function () {
return {
restrict:"A", // E-Element A-Attribute C-Class M-Comments
replace: false,
link: function($scope, elem, attrs) {
$scope[attrs.scopeElement] = elem[0];
}
};
})
$scope.fnRenderCarousel = function(elName){
$($scope[elName]).carousel();
}
现在,在HTML内部<input scope-element="txtMessage" >
创建自定义指令
masterApp.directive('ngRenderCallback', function() {
return {
restrict: "A",
link: function ($scope, element, attrs) {
setTimeout(function(){
$scope[attrs.ngEl] = element[0];
$scope.$eval(attrs.ngRenderCallback);
}, 30);
}
}
});
html模板的代码
<div ng-render-callback="fnRenderCarousel('carouselA')" ng-el="carouselA"></div>
获取scope元素是什么意思?你是说控制器声明的元素吗?你不应该从控制器中访问任何DOM元素!这正是Angular试图阻止的行为类型!!任何类型的DOM交互都只能通过指令进行,而不能在控制器中进行。事实上,经过进一步研究,
$element
的可能副本并不是访问该元素的好方法,而且正在被删除。您可能想用一个来做这个。@apohl,您在哪里读到它被弃用的消息?你提供的链接没有提到这一点,我在文档中也找不到任何关于它被弃用的内容…@apohl,在任何评论中都没有提到$element
被弃用。。。我需要知道它是否会被弃用,因为我们在几个地方的应用程序中都使用它,所以我想在升级时注意一下…@kentcdoff,好的,你是对的。弃用是错误的术语。因此,该方法可以工作,但它不是建议的用法。@apohl——有时您会情不自禁地使用它,例如在模式/弹出式场景中,您基本上是使用$compile
服务手动创建指令,以将元素与控制器绑定。我同意,这是一个混乱而不优雅的解决方案,但编程中充满了这些,对吗?=)我认为您应该使用一个指令而不是元素来实现这样的功能,check,但这仍然是一个展示如何在控制器中获取元素的好例子
<div ng-render-callback="fnRenderCarousel('carouselA')" ng-el="carouselA"></div>
$scope.fnRenderCarousel = function(elName){
$($scope[elName]).carousel();
}