【问题标题】:Access custom control in angular js在 Angular js 中访问自定义控件
【发布时间】:2016-03-22 19:49:51
【问题描述】:

我正在为测试项目开发 html 和 angular js,以学习 angular js。

我开发了一个自定义输入控件,用于在 html (http://teena.aaadev.info/platform/controls/textbox.html) 中进行屏蔽,它运行良好。现在我想在另一个 html 页面中使用该控件,就像这样:

<div my-control="textbox"></div>

<div my-control="textbox.html"></div>

一旦上面的代码在网络浏览器中运行或查看,它将自动加载该 div 中的文本框控件,该 div 继承了该控件的所有功能。这是我需要的基本东西。之后,我计划传递该控件的属性或选项以获取正确的控件格式。

我使用了以下代码,但它不起作用并显示空白页:

<div ng-include="'text.html'"></div>

我听说过 Routing & Multiple Views (https://docs.angularjs.org/tutorial/step_07),这对实现我的要求有帮助吗??

谢谢!

【问题讨论】:

  • 请确保您在发布时没有创建新的过于宽泛的标签(如标签“自定义”)。谢谢!

标签: jquery html angularjs controls


【解决方案1】:

如果你想使用单独的页面,那么一定要使用路由和多视图教程。

在 Henry 的 jsbin 示例中,您可以将指令定义为

textboxApp.directive('myTextbox', [function () { 
   return {
      restrict: 'A',
      scope: {mask: '@'},  // add other variables here
      controller: 'textboxController',
      templateUrl: 'textbox.html'
}]);

textbox.html 看起来像这样

<h3>mask="{{mask}}"</h3>
<input id="{{mask}}" type="text"
       ng-focus="focusInNumber($event)" 
       ng-blur="focusOutNumber($event)" 
       ng-keypress="checkNumer($event)" />

这里有更多关于 directives 的内容 - 我在第一次学习时发现这非常有用。

然后,像 index.html 这样的文件将具有当前位于 textbox.html 中的 Angular 应用程序设置。

<div my-textbox mask="none"></div>
<div my-textbox mask="thousand"></div>
<div my-textbox mask="currency"></div>

【讨论】:

  • 感谢您的回答。我确实尝试过这种方式,但它似乎不适用于我的主 html 文件。我准备了一个demo,看看你能不能看懂:teena.aaadev.info/platform/routes/index.html
  • 你有两个相互不了解的模块,这就是指令找不到 textboxController 的原因。尝试摆脱 var testApp = angular.module('testApp', []),将 testApp.directive 更改为 textboxApp.directive,并更改导入脚本 textbox.js 和 test.js 的顺序。另外,更改 ng-app="textboxApp"。
  • 我认为它成功了,并且离我的目标更近了。但是仍然有问题,比如没有得到 {{mask}} 模型值,还有一些错误来获取事件目标长度、事件键代码等。将更改上传到服务器以检查您是否可以帮助我,谢谢!
  • {{mask}} 其实是我的错,应该是作用域:{mask:'@'}。没有时间查看事件问题,但请查看 Angular 的 ng-keydown 文档。
  • 这两个问题都得到了解决。对于事件问题,我忘记传递myFucntion($event) 参数。现在它正在工作,但在那之后,另一个问题是我无法在文本框中写任何东西。对于这个问题,我想需要检查我现有的脚本。谢谢你的帮助。你是天才!
【解决方案2】:

您要做的是创建指令(可重复使用的 html 组件),而不是为您的页面创建控制器。指令本身是可移植的,这就是您的事件处理程序逻辑应该在的地方。

我为您的代码创建了一个 jsbin 精简版供您使用。您所需要的只是具有“my-textbox”属性以继承行为(它甚至不需要打开。

<input type="text" my-textbox ng-blur="blur($event)">

http://jsbin.com/hibufiwuxi/edit?html,js,output

【讨论】:

  • 我确实尝试过这种方式,但它似乎不适用于我的主 html 文件。我准备了一个demo,看看你能不能看懂:teena.aaadev.info/platform/routes/index.html
  • 使用@abeach3 和你的组合解决了问题,谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-04-18
  • 2011-01-09
  • 1970-01-01
  • 2014-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多