Noa*_*mpz 6 javascript angularjs angularjs-directive
我有两个指令:
// Generated by CoffeeScript 1.6.3
app.directive("focusMe", function() {
return {
scope: {
focus: "=focusMe"
},
link: function(scope, element) {
return scope.$watch("focus", function(value) {
if (value === true) {
element[0].focus();
return scope.focus = false;
}
});
}
};
});
Run Code Online (Sandbox Code Playgroud)
和:
// Generated by CoffeeScript 1.6.3
app.directive("cleanMe", function() {
return {
scope: {
clean: "=cleanMe"
},
link: function(scope, element) {
return scope.$watch("clean", function(value) {
if (value === true) {
element[0].value = "";
return scope.clean = false;
}
});
}
};
});
Run Code Online (Sandbox Code Playgroud)
和这个输入(angularUI):
<input type="text" ng-model="addUserSelected" typeahead="emp.value for emp in allUsers | filter:$viewValue | limitTo:5" typeahead-editable="false" typeahead-on-select="addLine($item.id)" focus-me="usersFocusInput" clean-me="usersCleanInput">
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
Error: [$compile:multidir] http://errors.angularjs.org/1.2.3/$compile/multidir?p0=cleanMe&p1=focusMe&p…2%20focus-me%3D%22usersFocusInput%22%20clean-me%3D%22usersCleanInput%22%3E
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
如果我从html中删除了clean-me属性,它可以工作.
谢谢
这里没有真正需要隔离的范围.使用"普通"指令范围,指令将只从父级继承,如下所示:
// Generated by CoffeeScript 1.6.3
app.directive("focusMe", function() {
return {
link: function(scope, element, attrs) {
return scope.$watch(attrs.focusMe, function(focusMe) {
if (focusMe.value === true) {
element[0].focus();
return scope[attrs.focusMe].value = false;
}
});
}
};
});
// Generated by CoffeeScript 1.6.3
app.directive("cleanMe", function() {
return {
link: function(scope, element, attrs) {
return scope.$watch(attrs.cleanMe, function(cleanMe) {
if (cleanMe.value === true) {
element[0].value = "";
return scope[attrs.cleanMe].value = false;
}
});
}
};
});
Run Code Online (Sandbox Code Playgroud)
如果您已经知道继承如何工作,请忽略此部分,只需添加完整性:
请注意,我使用的是[attrs.focusMe] .value,而不仅仅是[attrs.focusMe].原因是继承如何在javascript中工作.这些指令是子范围,因此如果您尝试执行范围[attrs.focusMe] = false,您将在指令范围内设置一个局部变量,即您不会影响父范围(使用它的控制器).但是,如果您在父作用域中创建一个对象(无论它是什么),然后更改该对象的值,那么它将不会设置局部变量,而是更新父对象.所以:
scope[attrs.focusMe] = false; // Sets a local variable, does not affect the parent
scope[attrs.focusMe].value = false; // Updates focusMe on the parent
Run Code Online (Sandbox Code Playgroud)
如果你想要一个深入的指南,这里有一个关于继承的好答案:AngularJS中范围原型/原型继承的细微差别是什么?
您有两个指令,它们要求对同一元素的隔离范围是不允许的。
不允许这样做的原因是,如果{{...}}指令中包含一些模板代码,则不清楚应该从哪个作用域获取其值。
考虑,而不是隔离范围,使用attribute.$observe观看cleanMe和focusMe性质以及作用于这些。
app.directive("focusMe", function() {
return {
link: function(scope, element, attributes) {
attributes.$observe("focusMe", function(value) {
if (value === true) {
element[0].focus();
scope.focus = false;
}
});
}
};
});
Run Code Online (Sandbox Code Playgroud)
和:
app.directive("cleanMe", function() {
return {
link: function(scope, element, attributes) {
attributes.$observe("cleanMe", function(value) {
if (value === true) {
element[0].value = "";
return scope.clean = false;
}
});
}
};
});
Run Code Online (Sandbox Code Playgroud)
我终于找到了解决方案:)
// Generated by CoffeeScript 1.6.3
app.directive("focusMe", function() {
return {
link: function(scope, element, attributes) {
return scope.$watch(attributes.focusMe, function(value) {
if (scope[value] === true) {
element[0].focus();
return scope[attributes.focusMe] = false;
}
});
}
};
});
// Generated by CoffeeScript 1.6.3
app.directive("cleanMe", function() {
return {
link: function(scope, element, attributes) {
return scope.$watch(attributes.cleanMe, function(value) {
if (value === true) {
element[0].value = "";
return scope[attributes.cleanMe] = false;
}
});
}
};
});
Run Code Online (Sandbox Code Playgroud)
在html中,usersFocusInput和usersCleanInput是范围内的参数,我使用scope[attributes.focusMe]来获取此参数并将其更改为false。
<input type="text" ng-model="addUserSelected" typeahead="emp.value for emp in allUsers | filter:$viewValue | limitTo:5" typeahead-editable="false" typeahead-on-select="addLine($item.id)" focus-me="usersFocusInput" clean-me="usersCleanInput">
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15334 次 |
| 最近记录: |