Angularjs:修改js中的作用域,稍后在页面中使用
Angularjs: modify scope in js and use later in page
如果有什么东西,我很想看看关于这样的文档。
我正试图将查询字符串中的一个值添加到控制器的作用域中,并在页面下方的另一个函数中使用该值。
这就是我尝试过的:
var id = Number(getQueryStringValue("id"));
if (!!id) {
$('[ng-controller="appControl"]').scope().id = id;
}
设置范围内的值和:
<p>
id: {{id}}
</p>
向下翻页打印id。如果我这样做:
var x = $('[ng-controller="appControl"]').scope();
我可以看到id确实已经添加到了作用域中,但我得到的唯一输出是id:
。我还可以看到,id实际上是一个数字,而不是字符串或其他无法打印的值。
--编辑--
由于这似乎不是最好的方法,我查看了工厂,以下是我的代码(由于某种原因仍然不起作用),包含在一个单独的文件中:
var app = angular.module('app', []);
app.controller('appctrl', function ($scope) {
$scope.dataArr= [
{'name': 'Yo'},
{'name': 'Dawg'}
];
});
app.factory('Data', function () {
var idValue = 0;
return {
setId: function (id) {
idValue = id;
},
getId: function () {
return idValue;
}
}
});
这是有问题的页面上的脚本:
<script type="text/javascript">
$(function () {
var id = Number(getQueryStringValue("id"));
if (!!id) {
app.controller('appctrl', function($scope, Data) {
$scope.id = Data.setId(id);
});
}
});
</script>
<div ng-app="app">
<div ng-controller="appctrl">
{{id}}
</div>
</div>
@artyom已经给了您一个提示。您需要在代码后面设置id后调用$apply()
函数,如下所示:
var id = Number(getQueryStringValue("id"));
if (!!id) {
$('[ng-controller="appControl"]').scope().id = id;
$('[ng-controller="appControl"]').scope().$apply();
}
那么您正在使用jQuery来修改您的作用域?
这听起来是个非常非常糟糕的主意。
试着在你的主要框架内解决所有问题,只有在问题真的无法解决的情况下才采用其他方法。
你没有提到你想解决什么问题,但现在,我没有理由认为AngularJS无法解决这个问题。
如果您希望能够在控制器内设置作用域变量,并能够在控制器外访问它们,请查看$rootscope
。
在分配新的id
值后,尝试调用appControl
控制器中的$scope.$apply()
。
请参阅并调查这篇文章。
但是,在AngularJS中在控制器之间共享数据是一种非常糟糕的方法。这里和这里描述了更好的方式。
在不相关的作用域之间共享数据的正确方式是通过服务或工厂:
app.factory('Data', function() {
var idValue = 0;
return {
setId: function(id) {
idValue = id;
},
getId: function() {
return idValue;
}
}
});
然后,在任何控制器中,您都可以注入数据服务:
app.controller('ctrl1', function($scope, Data) {
Data.setId(10);
$scope.id = Data.getId();
});
app.controller('ctrl2', function($scope, Data) {
$scope.id = Data.getId();
});
var app = angular.module('app', []);
app.factory('Data', function() {
var idValue = 0;
return {
setId: function(id) {
idValue = id;
},
getId: function() {
return idValue;
}
}
});
app.controller('ctrl1', function($scope, Data) {
Data.setId(10);
$scope.id = Data.getId();
});
app.controller('ctrl2', function($scope, Data) {
$scope.id = Data.getId();
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app">
<div ng-controller="ctrl1">
ctrl1: {{ id }}
</div>
<div ng-controller="ctrl2">
ctrl2: {{id}}
</div>
</div>
相关文章:
- Angularjs:修改js中的作用域,稍后在页面中使用
- 为什么我从浏览器修改html/js时会多次发送ajax请求
- Node.js:在修改时确定文件大小
- 使用Underscore.js修改json数组中所选元素的更有效方法
- 修改d3.js圆环图以读取json数组
- 如何将Three.js场景中的几何体导出为已修改的OBJ
- Three.js保存修改后的网格顶点r67
- 在Drupal7中扩展字段集时,修改collapse.js以从xml获取附加数据
- 使用Node.js代理POST并修改头
- Vue.js-插值错误-如何将样式修改为v-bind:style
- 请求有关修改 .js 脚本以在 chrome 中包含打开标签页的帮助
- 修改 JS 文件的内容
- 如何修改JS数组中的此类数据
- 如何在运行的JS函数中执行函数-修改JS游戏
- 修改JS显示/隐藏,使其根据页面自动显示
- 修改JS核心对象不好吗
- 在Inspect Element Editor中修改JS代码
- RubyonRails-修改.js.erb中嵌入Ruby的一部分
- 在插件js中添加函数,而无需实际修改js文件
- 如何在客户端修改js文件