Angularjs Angulars链接功能何时运行?
据我所知,在呈现页面之前,它只运行一次。但是,是否有过这样的情况,即它在呈现页面之后运行 我试着用这个测试了一些东西:Angularjs Angulars链接功能何时运行?,angularjs,Angularjs,据我所知,在呈现页面之前,它只运行一次。但是,是否有过这样的情况,即它在呈现页面之后运行 我试着用这个测试了一些东西: angular .module('应用程序',[]) .directive('test',函数($http){ 返回{ 限制:'E', 模板:“”, 链接:功能(范围、el、属性){ var input=angular.element(el[0].子元素[0]); input.on('change',function(){ console.log(“更改事件”); 作用域$ap
angular
.module('应用程序',[])
.directive('test',函数($http){
返回{
限制:'E',
模板:“”,
链接:功能(范围、el、属性){
var input=angular.element(el[0].子元素[0]);
input.on('change',function(){
console.log(“更改事件”);
作用域$apply(函数(){
console.log(“摘要周期”);
});
});
input.on('keyup',function(){
console.log(“keyup事件”);
变量根http://jsonplaceholder.typicode.com';
$http.get(root+/users)
.success(函数(){
log(“http请求成功”);
})
.错误(函数(){
log('http请求错误');
});
});
log(“链接函数运行”);
}
};
});
$http
?)是否会导致链接功能运行所有这些问题的答案似乎都是“否”。编译指令实例时,即创建
元素时,链接
函数运行。当angular的引导编译页面时,当它从ng if
生成时,当ng repeat
生成时,当它使用$compile
生成时,等等
link
不会对同一指令实例触发两次。值得注意的是,它在指令的生命周期中编译模板后立即触发。在编译指令的实例时,即在创建
元素时,链接
函数运行。当angular的引导编译页面时,当它从ng if
生成时,当ng repeat
生成时,当它使用$compile
生成时,等等
link
不会对同一指令实例触发两次。值得注意的是,它会在指令生命周期中编译模板后立即触发。1-否,它会导致更改唯一绑定的ng模型
2-否,它只会在事件绑定内启动代码
3-同样是否,事件绑定将启动$http.get()
。请不要在指令上直接添加$http。使用工厂
或类似的工具
4-邓诺
正如Dylan Watt所说,指令link
仅在每个元素/attr对指令进行编译(仅一次)时运行。。。。您可以用不同的方式编译它。普通http,$compile
,ng repeat
您可以在指令中创建$watch,以“重新启动”绑定元素更改上的某些代码
这可能会对您有所帮助:1-否,它会导致更改唯一绑定的ng模型 2-否,它只会在事件绑定内启动代码 3-同样是否,事件绑定将启动
$http.get()
。请不要在指令上直接添加$http。使用工厂
或类似的工具
4-邓诺
正如Dylan Watt所说,指令link
仅在每个元素/attr对指令进行编译(仅一次)时运行。。。。您可以用不同的方式编译它。普通http,$compile
,ng repeat
您可以在指令中创建$watch,以“重新启动”绑定元素更改上的某些代码
这可能会对您有所帮助:“链接函数对模板的每个实例化执行一次。”——“链接函数对模板的每个实例化执行一次。”——。谢谢。我这样做是为了演示
ng repeat
场景。没问题。你想让我在plnkr中看些什么,或者仅仅是为了启发?不是特别的,只是觉得这可能是一个有用的演示。谢谢。我这样做是为了演示ng repeat
场景。没问题。你想让我在plnkr中看些什么,或者仅仅是为了启发?不是特别的,只是想作为一个演示可能有用。
angular
.module('app', [])
.directive('test', function($http) {
return {
restrict: 'E',
template: '<input />',
link: function(scope, el, attrs) {
var input = angular.element(el[0].children[0]);
input.on('change', function() {
console.log('change event');
scope.$apply(function() {
console.log('digest cycle');
});
});
input.on('keyup', function() {
console.log('keyup event');
var root = 'http://jsonplaceholder.typicode.com';
$http.get(root+'/users')
.success(function() {
console.log('http request successful');
})
.error(function() {
console.log('http request error');
});
});
console.log('link function run');
}
};
});