我试图实施一个指令,将使用ng-show
和$timeout
来延迟容器的显示。指令范围使用隐藏父元素的内部元素
这里就是我的指令看起来像:
angular.module('myApp')
.directive('delay', function($timeout) {
return {
template: '<div ng-show="showIt" ng-transclude></div>',
replace: false,
transclude: true,
scope:true,
restrict: 'A',
link: function postLink(scope, element, attrs) {
$timeout(function() {
scope.showIt = true;
}, attrs.delay);
}
};
});
然后,我会用它在我看来,这样的
<div delay="1000">
<intput type="text" ng-model="myText"/>
</div>
到目前为止,延时工作。是的,我很自豪。但是,myText
不能从控制器访问,因为它不在父范围内可见。我尝试将范围改为此:
scope: {
myText: '='
}
建立一个双向数据绑定...没有任何成功。
什么是最简单的方法来实现我试图实现使用指令?非常感谢!
编辑:金科玉律
由于很多GregL他的回答!
最好的解决方法是简单地将我的ng模型包装在对象中以利用点符号来避免将ng模型绑定到子范围。子范围使用原型继承来查找其值,所以当在子范围中设置该值时,它不再查找父范围。
非常感谢,你是一个天才,它完美的作品!这是我的第一个指令,我远未掌握所有方面。当你谈到黄金法则时,你的意思是我应该将模型myText设置为一个对象?然后使用myObject.myText?谢谢@GregL! – 2014-12-02 03:22:18
没关系我找到了我的问题的答案:http://stackoverflow.com/questions/18128323/angularjs-if-you-are-not-using-a-dot-in-your-models-you-are-doing-它-错 – 2014-12-02 03:26:25