在AngularJS主页的"创建组件"部分中,有以下示例:
controller: function($scope, $element) {
var panes = $scope.panes = [];
$scope.select = function(pane) {
angular.forEach(panes, function(pane) {
pane.selected = false;
});
pane.selected = true;
}
this.addPane = function(pane) {
if (panes.length == 0) $scope.select(pane);
panes.push(pane);
}
}
Run Code Online (Sandbox Code Playgroud)
注意如何select添加方法$scope,但是addPane添加了方法this.如果我将其更改为$scope.addPane,则代码会中断.
文档说实际上存在差异,但没有提到差异是什么:
以前版本的Angular(pre 1.0 RC)允许您
this与该$scope方法互换使用,但现在不再是这种情况了.内的方法上的范围限定this并且$scope是可互换的(角套this到$scope),但是不另外你的控制器构造内部.
如何this和$scope在AngularJS控制器的工作?
如何$scope使用.$emit和.$on方法将对象从一个控制器发送到另一个控制器?
function firstCtrl($scope) {
$scope.$emit('someEvent', [1,2,3]);
}
function secondCtrl($scope) {
$scope.$on('someEvent', function(mass) { console.log(mass); });
}
Run Code Online (Sandbox Code Playgroud)
它不像我认为的那样工作.怎么做$emit和$on工作?
我发现自从以角度构建应用程序后,我需要手动将页面更新到我的范围.
我知道这样做的唯一方法是$apply()从我的控制器和指令的范围调用.这个问题是它不断向控制台抛出一个错误:
错误:$ digest已在进行中
有谁知道如何避免这个错误或以不同的方式实现相同的事情?
是否可以在AngularJS控制器中创建HTML片段并在视图中显示此HTML?
这需要将不一致的JSON blob转换为嵌套的id : value对列表.因此,HTML是在控制器中创建的,我现在希望显示它.
我创建了一个模型属性,但是如果不打印HTML,则无法在视图中呈现它.
更新
似乎问题来自角度渲染创建的HTML作为引号内的字符串.将试图找到解决这个问题的方法.
示例控制器:
var SomeController = function () {
this.customHtml = '<ul><li>render me please</li></ul>';
}
Run Code Online (Sandbox Code Playgroud)
示例视图:
<div ng:bind="customHtml"></div>
Run Code Online (Sandbox Code Playgroud)
给:
<div>
"<ul><li>render me please</li></ul>"
</div>
Run Code Online (Sandbox Code Playgroud) 在AngularJS中设置焦点到输入字段的"角度方式"是什么?
更具体的要求:
<input>此模态中.<input>变得可见(例如,通过单击某个按钮),将焦点设置在它上面.我试图达到第一个要求有autofocus,但只有当模态被打开的第一次,只有在特定的浏览器(如Firefox中这是行不通的)这个作品.
任何帮助将不胜感激.
关于搜索引擎和SEO,我看到AngularJS应用程序存在两个问题:
1)自定义标签会发生什么?搜索引擎会忽略这些标签中的所有内容吗?即假设我有
<custom>
<h1>Hey, this title is important</h1>
</custom>
Run Code Online (Sandbox Code Playgroud)
<h1>即使是在自定义标签内,也会被编入索引?
2)有没有办法避免索引{{}}的搜索引擎字面上绑定?即
<h2>{{title}}</h2>
Run Code Online (Sandbox Code Playgroud)
我知道我可以做点什么
<h2 ng-bind="title"></h2>
Run Code Online (Sandbox Code Playgroud)
但是,如果我想让爬虫"看到"标题怎么办?服务器端渲染是唯一的解决方案吗?
我想在AngularJS模板中做一个条件.我从Youtube API获取视频列表.一些视频的比例为16:9,有些视频的比例为4:3.
我想做一个像这样的条件:
if video.yt$aspectRatio equals widescreen then
element's attr height="270px"
else
element's attr height="360px"
Run Code Online (Sandbox Code Playgroud)
我正在使用迭代视频ng-repeat.我不知道该怎么办这个条件:
在我的控制器中,我有以下数据:
$scope.object = data
现在这个数据是带有键和值的字典json.
我可以object.name在模板中访问该属性.有没有什么方法可以迭代键,并在表格中显示它们
<tr><td> {{key}} </td> <td> data.key </td>
数据是这样的
{
"id": 2,
"project": "wewe2012",
"date": "2013-02-26",
"description": "ewew",
"eet_no": "ewew",
}
Run Code Online (Sandbox Code Playgroud) 我有几个复选框:
<input type='checkbox' value="apple" checked>
<input type='checkbox' value="orange">
<input type='checkbox' value="pear" checked>
<input type='checkbox' value="naartjie">
Run Code Online (Sandbox Code Playgroud)
我想绑定到我的控制器中的列表,以便每当更改复选框时,控制器都会维护所有已检查值的列表,例如,['apple', 'pear'].
ng-model似乎只能将一个复选框的值绑定到控制器中的变量.
还有另一种方法可以将四个复选框绑定到控制器中的列表吗?
我在过去几周一直在使用AngularJS,而真正困扰我的一件事是,即使在尝试了所有排列或http://docs.angularjs.org/api/ng规范中定义的配置之后.directive:select,我仍然得到一个空选项作为select元素的第一个子元素.
这是玉:
select.span9(ng-model='form.type', required, ng-options='option.value as option.name for option in typeOptions');
Run Code Online (Sandbox Code Playgroud)
在这里控制器:
$scope.typeOptions = [
{ name: 'Feature', value: 'feature' },
{ name: 'Bug', value: 'bug' },
{ name: 'Enhancement', value: 'enhancement' }
];
Run Code Online (Sandbox Code Playgroud)
最后,这是生成的HTML:
<select ng-model="form.type" required="required" ng-options="option.value as option.name for option in typeOptions" class="span9 ng-pristine ng-invalid ng-invalid-required">
<option value="?" selected="selected"></option>
<option value="0">Feature</option>
<option value="1">Bug</option>
<option value="2">Enhancement</option>
</select>
Run Code Online (Sandbox Code Playgroud)
我需要做些什么才能摆脱它?
PS:事情也没有这个,但如果你使用select2而没有多重选择,它看起来很奇怪.