小编Bru*_*uno的帖子

弹出窗口最优雅的方式

我有这个AngularJS应用程序.一切正常.

现在我需要在特定条件成立时显示不同的弹出窗口,我想知道什么是最好的方法.

目前我正在评估两个选项,但我绝对愿意接受其他选择.


选项1

我可以为弹出窗口创建新的HTML元素,并直接从控制器附加到DOM.

这将打破MVC设计模式.我对这个解决方案不满意.


选项2

我总是可以在静态HTML文件中插入所有弹出窗口的代码.然后,使用ngShow,我可以隐藏/只显示正确的弹出窗口.

此选项不是真正可伸缩的.


所以我很确定必须有更好的方法来实现我想要的.

javascript model-view-controller popup show-hide angularjs

178
推荐指数
5
解决办法
23万
查看次数

如何在angularjs应用程序中实现安全(!)身份验证系统?

我是angularjs的新手......

我阅读了文档,并完成了教程; 我自己也试过别的东西,事情开始对我有意义.

现在我想知道如何建立一个安全的身份验证系统.

简单的部分:没有代码,我将描述我的代码执行的操作:

我有一个经典的表单:用户名和密码文本输入.

用户填写表单,然后按ENTER键.

一个ajax请求开始,响应是一个JSON告诉我类似"我知道你好"或"我不知道你是谁"的东西.

我现在需要的是在我的应用程序的不同视图之间保留访问者的记录状态(或不记录).

我在互联网上读到,要实现这一目标,有人设置变量($ scope.isLogged = true),其他人使用cookie; 但是javascript变量和cookie可以使用firebug或类似的开发工具轻松编辑.

......最后问题是:

那么,您有什么建议在angularjs应用程序中实现安全的身份验证系统吗?

javascript security authentication cookies angularjs

57
推荐指数
3
解决办法
2万
查看次数

AngularJS,这种使用服务的方式好吗?

我有这个HTML:

<p>Hello {{name}}</p>
Run Code Online (Sandbox Code Playgroud)

控制器是:

function myCtrl(scope, service) {
    scope.name = service.getUsername(); // service.getUsername() return "World!"
}
myCtrl.$inject = ['$scope', 'originalService'];
Run Code Online (Sandbox Code Playgroud)

该服务工作正常,所以我不粘贴代码...在这种情况下,结果是" Hello world! "我以这种方式更改了HTML:

<p>Hello {{service.getUsername()}}</p>
Run Code Online (Sandbox Code Playgroud)

但这不起作用.

我改变了控制器:

function myCtrl(scope, service) {
    scope.ser = service;
}
myCtrl.$inject = ['$scope', 'originalService'];
Run Code Online (Sandbox Code Playgroud)

然后是HTML

<p>Hello {{ser.getUsername();}}</p>
Run Code Online (Sandbox Code Playgroud)

这有效!

所以我的问题是:

这是直接在HTML中使用服务功能的唯一方法,还是我遗漏了什么?

javascript angularjs angularjs-service angularjs-scope

28
推荐指数
2
解决办法
2万
查看次数

AngularJS - 将ng-model绑定到一个名称存储在另一个变量中的变量

我正在尝试将输入字段的值绑定到变量.我不知道这个变量的名称是先验的 ; 它存储在另一个变量中.

这是html:

<body ng-controller="stageController">
    <form name="myForm" novalidate="">
        <input type="text" name="myText" ng-model="model" />
    </form>
</body>
Run Code Online (Sandbox Code Playgroud)

这是控制器:

function stageController($scope) {
    $scope.model = 'realModel'; // contains the name of the variable that i would bind to the field 
    $scope.realModel = 'initial value of the field';
}
Run Code Online (Sandbox Code Playgroud)

我也是个小提琴.

这不起作用,因为当前绑定在输入字段和model变量之间.相反,我会将输入字段绑定到变量名称存储在$scope.model变量中的变量(在本例中realModel).

可能吗?怎么样?

javascript angularjs

14
推荐指数
3
解决办法
3万
查看次数

如何为jsfiddle.net代码片段提供一个人类可读的名称?

在jsfiddle.net中有一种方法可以为代码片段提供一个人类可读的名称吗?

jsfiddle

13
推荐指数
3
解决办法
3468
查看次数

AngularJS - 我偏爱的控制器

我有一个在我的DOM中多次使用的模板.

<div ng-controller="theController">
    content does not matter
</div>
Run Code Online (Sandbox Code Playgroud)

所以控制器多次被证实.这是一个问题,因为如果我把一个观察者放在控制器中

theController = function($scope) {
    $scope.$on('myVar', function() {
        // run one time for each time the template is repeated
    })
}
Run Code Online (Sandbox Code Playgroud)

有关如何避免这种情况的任何想法?提前致谢.

UPDATE

好的,我会尽量让自己更清楚.

也许我有一个表单,它是根据异步请求的响应动态构建的.

<form ng-controller="formController">
    <div ng-repeat="f in fields">
        <ng-inclide src="f.fields"></ng-include>
    </div>
</form>
Run Code Online (Sandbox Code Playgroud)

控制器是这样的:

function formController($scope) {
    $scope.fields = [{ template:'', ... }];
    // data come from an ajax request... 
    // here are static for the sake of simplicity.
}
Run Code Online (Sandbox Code Playgroud)

所以我不知道表格中会附加哪些字段.

表单字段结构存储在html partials中......类似于:

<div ng-controller="inputController">
    <label> .... </label>
    <input type="text" …
Run Code Online (Sandbox Code Playgroud)

javascript model-view-controller templates controller angularjs

7
推荐指数
2
解决办法
9354
查看次数

ngPattern指令的问题

我有这个代码:

<form name="test">
    <input type="text" ng-model="code" name="code" ng-pattern="/^code_[0-9]+$/"/>
    <div ng-show="test.code.$dirty && test.code.$invalid">
        Error:
        <span ng-show="test.code.$error.pattern">Pattern fail.</span>
    </div>
</form>
Run Code Online (Sandbox Code Playgroud)

我对此代码有2个问题:

  1. "code_232","code_232""code_232"等字符串通过验证.我不是正则表达式的专家,所以这可能是一个与我写的正则表达式有关的问题:/^code_[0-9]+$/

  2. 如果我开始编写"code_23892"(正确的字符串),我仍然在写(test.code.$error.pattern = true)时收到错误消息.是否有内置的方法来避免这种情况?所以我的行为是:

如果我写"cod",输入仍然是焦点:没有错误

如果我写"cod"并且输入失去焦点:错误.

如果我写"a","ca","coa"等:错误,导致模式已被违反.

这是否已经可行,或者我已经编写了一个客户验证指令来实现这一目标?

提前致谢.

regex validation angularjs angularjs-directive

5
推荐指数
1
解决办法
9596
查看次数

如何在JavaScript中访问参数化对象属性?

对象#1:

var chosenProperties = { 'size' : 'large' }
Run Code Online (Sandbox Code Playgroud)

chosenProperties是用户想要从下面的对象访问的属性.此对象基于表单值创建.

对象#2:

var allProperties = { 'sizes' : { 'large' : 'x', 'small' : 'y' } }
Run Code Online (Sandbox Code Playgroud)

通常我会写allProperties.sizes.large已经x显示,但是,如果我需要什么来访问x,如果我只有chosenProperties?我确信有一些方法可以做到,但没有任何想法.

javascript jquery

1
推荐指数
1
解决办法
61
查看次数

为什么跨度宽度会被忽略?

我在代码中发现了这种情况,无法找到解释.为什么Chrome(以及其他浏览器)将宽度设置为自动,忽略了我的width: 15px

这是一个截图:

截图

css google-chrome

0
推荐指数
1
解决办法
167
查看次数