在AngularJS中,$watch不会在一个指令被启动后被调用
$watch isn't called after one directive is initiated in AngularJS
我正在尝试调用一个元素的焦点在模态指令。
在该指令被调用之后,focus-me指令只会被第一次调用。
我尝试在对话框指令中添加focus-me元素,如Plunker所示。下面是我在指令中尝试的事情。
- 显示模式对话框[working]
- 对话框显示后,我正试图聚焦对话框中的特定元素[为此我在focus-me指令中添加了watch元素]
- 焦点只是第一次发生。
砰砰作响
请帮助,如何触发手表元素上的指令为上述Plunker。非常感谢。
下面是我当前使用的焦点和对话框的指令代码。
app.directive('focusMe', function($timeout, $parse) {
return {
link: function(scope, element, attrs) {
var model = $parse(attrs.focusMe);
scope.$watch(model, function(value) {
console.log('value=',value);
if(value === true) {
$timeout(function() {
element[0].select();
element[0].focus();
});
}
});
element.bind('blur', function() {
console.log('blur')
scope.$apply(model.assign(scope, false));
})
}
};
}).directive('modalDialog', function(){
return {
restrict: 'AE',
scope: {
show: '=',
focusDesign:'=focusDesign'
},
replace: true,
transclude: true,
link: function(scope, element, attrs) {
scope.dialogStyle = {};
if (attrs.width)
scope.dialogStyle.width = attrs.width;
if (attrs.height)
scope.dialogStyle.height = attrs.height;
if (attrs.focusDesigniso)
scope.focusDesigniso=attrs.focusDesigniso;
scope.hideModal = function(focusDesign) {
scope.show = false;
focusDesigniso=false;
//$scope.focusDesign=false;
};
scope.hideModalC = function() {
alert("I m in hide");
scope.show = false;
};
},
template: "<div class='ng-modal' ng-show='show'><div class='ng-modal-overlay' ng-click='hideModal(focusDesign)' ng-model='focusDesign'></div><div class='ng-modal-dialog' ng-style='dialogStyle'><div class='ng-modal-close' ng-click='hideModal(focusDesign)' ng-model='focusDesign'>X</div><div class='ng-modal-dialog-content' ng-transclude></div></div></div>"
};
});
我在指令中找到了问题的解决方案。
美元的范围。我正在应用它的模型,而不是我应该使用的焦点元素。
更新后的焦点指令我已经复制到下面与工作的活塞
app.directive('focusMe', function($timeout, $parse) {
return {
link: function(scope, element, attrs) {
var model = $parse(attrs.focusMe);
scope.$watch(model, function(value) {
console.log('value=',value);
if(value === true) {
$timeout(function() {
element[0].select();
element[0].focus();
});
}
});
element.bind('blur', function() {
scope.$apply(function()
{
attrs.focusMe=!attrs.focusMe;
})
})
}
};
});
工作活塞
相关文章:
- 代码背后调用一个JavaScript函数的按钮点击-C#
- 在Javascript中对类的每个实例调用一个方法
- 调用一个“;默认瓦片”;在谷歌地图中
- 使用几个<脚本>标签不会't工作-只调用一个脚本
- NodeJS-从同一文件中的另一个方法调用一个方法
- 从我自己的脚本中包含的Javascript文件中调用一个函数
- 你能调用一个在调用者上下文中返回的函数吗
- 我需要在每5秒内调用一个函数,并重置持续时间
- 触发事件以调用一个函数'它在一个封闭的里面
- 每次数据表中的页面更改时调用一个函数
- 在带有参数列表的表单submit上调用一个方法
- 调用一个函数两次
- 我想在 javascript 中调用一个 php 函数,并在其中传递两个数组作为参数
- 从面板中调用一个在 ExtJs 中没有事件的方法
- 如何调用一个函数,其名称是通过在node.js中组合一些变量来动态创建的
- 动态弹出窗口'通过调用一个永远运行并返回's每个周期后的数据
- 通过javascript调用一个C#windows服务函数
- 从html中调用一个c++函数
- 你能用onblur事件调用一个外部Javascript吗
- 从javascript中调用一个c#函数