Javascript AngularJS—;将作用域(不含$)注入控制器
在中,我注意到他们已将一个作用域(没有前缀美元符号)传递给底部附近的Javascript AngularJS—;将作用域(不含$)注入控制器,javascript,angularjs,angularjs-scope,Javascript,Angularjs,Angularjs Scope,在中,我注意到他们已将一个作用域(没有前缀美元符号)传递给底部附近的对话框控制器 (function(angular, undefined){ "use strict"; angular .module('demoApp', ['ngMaterial']) .controller('AppCtrl', AppController); function AppController($scope, $mdDialog) { var alert; $scope.
对话框控制器
(function(angular, undefined){
"use strict";
angular
.module('demoApp', ['ngMaterial'])
.controller('AppCtrl', AppController);
function AppController($scope, $mdDialog) {
var alert;
$scope.showAlert = showAlert;
$scope.showDialog = showDialog;
$scope.items = [1, 2, 3];
// Internal method
function showAlert() {
alert = $mdDialog.alert({
title: 'Attention',
content: 'This is an example of how easy dialogs can be!',
ok: 'Close'
});
$mdDialog
.show( alert )
.finally(function() {
alert = undefined;
});
}
function showDialog($event) {
var parentEl = angular.element(document.body);
$mdDialog.show({
parent: parentEl,
targetEvent: $event,
template:
'<md-dialog aria-label="List dialog">' +
' <md-dialog-content>'+
' <md-list>'+
' <md-list-item ng-repeat="item in items">'+
' <p>Number {{item}}</p>' +
' '+
' </md-list-item></md-list>'+
' </md-dialog-content>' +
' <div class="md-actions">' +
' <md-button ng-click="closeDialog()" class="md-primary">' +
' Close Dialog' +
' </md-button>' +
' </div>' +
'</md-dialog>',
locals: {
items: $scope.items
},
controller: DialogController
});
function DialogController(scope, $mdDialog, items) {
scope.items = items;
scope.closeDialog = function() {
$mdDialog.hide();
}
}
}
})(angular);
(函数(角度,未定义){
“严格使用”;
有棱角的
.module('demoApp',['ngMaterial']))
.controller(“AppCtrl”,AppController);
函数AppController($scope,$mdDialog){
风险值预警;
$scope.showAlert=showAlert;
$scope.showDialog=showDialog;
$scope.items=[1,2,3];
//内部方法
函数showAlert(){
alert=$mdDialog.alert({
标题:"注意",,
内容:“这是一个对话框多么容易的例子!”,
好的:“结束”
});
$mdDialog
.显示(警报)
.最后(函数(){
警报=未定义;
});
}
函数showDialog($event){
var parentEl=angular.element(document.body);
$mdDialog.show({
家长:家长,
targetEvent:$event,
模板:
'' +
' '+
' '+
' '+
“编号{{item}}”+
' '+
' '+
' ' +
' ' +
' ' +
“关闭对话框”+
' ' +
' ' +
'',
当地人:{
项目:$scope.items
},
控制器:对话框控制器
});
功能对话框控制器(范围,$mdDialog,项){
scope.items=项目;
scope.closeDialog=函数(){
$mdDialog.hide();
}
}
}
})(角度);
我已经读到,$
是一种命名约定,是确保变量不会被覆盖的好方法。为什么这段代码没有遵循这种约定?也就是说,在这种情况下,我们如何知道何时使用$
,以及它的意义是什么?我相信在这种情况下,它肯定不仅仅是命名约定,或者为了保持一致性,作者会选择使用$scope
注意:我知道链接函数中的$scope
和scope
之间的区别,其中scope
指向一组固定的参数。我不相信这就是在本文中使用scope
的原因,但如果我错了,请随时告诉我
谢谢!我认为这里的文档是不一致的,同时也是正确的 这里的
scope
和$scope
是相同的,但我只是在阅读了源代码后才发现。罪魁祸首行在局部
被选项扩展的地方,而这些选项又有一个scope
属性
return showDone = compilePromise.then(function(compileData) {
angular.extend(compileData.locals, self.options);
element = compileData.link(options.scope);
我很确定,$scope
作为scope
可访问只是偶然的,为了保持干净,应该使用$scope
引用$injector
提供的值,例如在控制器中
我已提交以修复不一致性并进行编译。这不是对约定的失败,甚至不是对使用模式的代码段的失败
使用scope
,而不是$scope
,是为了避免覆盖嵌套函数中的变量
选择放置范围
而不使用dolar符号,以避免为谁获取代码段而产生错误
例如,使用控制器作为
语法来分离事物,可以帮助清理事物。没错@freeloper。DialogController函数是一个普通函数,而不是角度控制器或角度指令控制器。scope只是给那里的参数起的一个名称。它不是注入的$scope。感谢您的深入了解-不过,它是通过$mdDialog.show({controller:DialogController});?作为一个控制器列出的?而且,呃,如果它不是控制器,它到底在做什么?:-)谢谢。你太棒了。非常感谢!我在这个问题上遇到了很多麻烦。