标签: angularjs-scope

如何在Angular中使用$ rootScope来存储变量?

如何使用$rootScope我想稍后在另一个控制器中访问的控制器中存储变量?例如:

angular.module('myApp').controller('myCtrl', function($scope) {
  var a = //something in the scope
  //put it in the root scope
});

angular.module('myApp').controller('myCtrl2', function($scope) {
  var b = //get var a from root scope somehow
  //use var b
});
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

angularjs angularjs-scope angularjs-controller rootscope

215
推荐指数
5
解决办法
37万
查看次数

在观察AngularJS中的模型更改时,如何忽略初始加载?

我有一个网页,作为单个实体的编辑器,它作为$ scope.fieldcontainer属性中的深层图形.在我从REST API(通过$ resource)获得响应后,我将一个监视添加到'fieldcontainer'.我正在使用这个手表来检测页面/实体是否"脏".现在我正在使保存按钮反弹,但实际上我想让保存按钮不可见,直到用户弄脏模型.

我得到的是手表的单个触发器,我认为这是因为.fieldcontainer = ...分配在我创建手表后立即发生.我想只是使用"dirtyCount"属性吸收最初的误报,但感觉非常hacky ......而且我认为必须有一种"Angular惯用"方式来解决这个问题 - 我不是唯一一个用手表检测脏模型.

这是我设置手表的代码:

 $scope.fieldcontainer = Message.get({id: $scope.entityId },
            function(message,headers) {
                $scope.$watch('fieldcontainer',
                    function() {
                        console.log("model is dirty.");
                        if ($scope.visibility.saveButton) {
                            $('#saveMessageButtonRow').effect("bounce", { times:5, direction: 'right' }, 300);
                        }
                    }, true);
            });
Run Code Online (Sandbox Code Playgroud)

我只是一直认为,除了用"if(dirtyCount> 0)"保护我的"UI脏"代码之外,必须有一个更清洁的方法...

angularjs angularjs-scope

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

使用ng-include时失去范围

我有这个模块路线:

var mainModule = angular.module('lpConnect', []).
    config(['$routeProvider', function ($routeProvider) {
    $routeProvider.
        when('/home', {template:'views/home.html', controller:HomeCtrl}).
        when('/admin', {template:'views/admin.html', controller:AdminCtrl}).
        otherwise({redirectTo:'/connect'});
}]);
Run Code Online (Sandbox Code Playgroud)

主页HTML:

<div ng-include src="views.partial1"></div>
Run Code Online (Sandbox Code Playgroud)

partial1 HTML:

<form ng-submit="addLine()">
    <input type="text" ng-model="lineText" size="30" placeholder="Type your message here">
</form>
Run Code Online (Sandbox Code Playgroud)

HomeCtrl:

function HomeCtrl($scope, $location, $window, $http, Common) {
    ...
    $scope.views = {
        partial1:"views/partial1.html"
    };

    $scope.addLine = function () {
        $scope.chat.addLine($scope.lineText);
        $scope.lines.push({text:$scope.lineText});
        $scope.lineText = "";
    };
...
}
Run Code Online (Sandbox Code Playgroud)

addLine函数$scope.lineTextundefined,这可以通过添加ng-controller="HomeCtrl"来解决partial1.html,但是它会导致控制器被调用两次.我在这里错过了什么?

html javascript angularjs angularjs-scope angularjs-ng-include

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

角度指令可以将参数传递给指令属性中指定的表达式中的函数吗?

我有一个form指令,它使用callback带有隔离范围的指定属性:

scope: { callback: '&' }
Run Code Online (Sandbox Code Playgroud)

它位于一个内部,ng-repeat因此我传入的表达式包括id对象作为回调函数的参数:

<directive ng-repeat = "item in stuff" callback = "callback(item.id)"/>
Run Code Online (Sandbox Code Playgroud)

当我完成指令后,它会$scope.callback()从其控制器函数调用.对于大多数情况来说这很好,这就是我想要做的,但有时候我想从内部添加另一个参数directive.

是否有一个允许这样的角度表达式:$scope.callback(arg2)导致callback被调用arguments = [item.id, arg2]

如果没有,最好的方法是什么?

我发现这有效:

<directive 
  ng-repeat = "item in stuff" 
  callback = "callback" 
  callback-arg="item.id"/>
Run Code Online (Sandbox Code Playgroud)

scope { callback: '=', callbackArg: '=' }
Run Code Online (Sandbox Code Playgroud)

和指令调用

$scope.callback.apply(null, [$scope.callbackArg].concat([arg2, arg3]) );
Run Code Online (Sandbox Code Playgroud)

但我不认为它特别整洁,它涉及在隔离范围内放置额外的东西.

有没有更好的办法?

这里的Plunker游乐场(打开控制台).

javascript angularjs angularjs-directive angularjs-scope

158
推荐指数
4
解决办法
13万
查看次数

Angularjs:'控制器作为语法'和$ watch

使用controller as语法时如何订阅属性更改?

controller('TestCtrl', function ($scope) {
  this.name = 'Max';
  this.changeName = function () {
    this.name = new Date();
  }
  // not working       
  $scope.$watch("name",function(value){
    console.log(value)
  });
});
Run Code Online (Sandbox Code Playgroud)
<div ng-controller="TestCtrl as test">
  <input type="text" ng-model="test.name" />
  <a ng-click="test.changeName()" href="#">Change Name</a>
</div>  
Run Code Online (Sandbox Code Playgroud)

javascript angularjs angularjs-scope ng-controller

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

在自定义指令的范围绑定中使用符号'@','&','='和'>':AngularJS

我已经阅读了很多关于在AngularJS中实现自定义指令时使用这些符号的内容,但这个概念对我来说仍然不清楚.我的意思是,如果我在custom指令中使用其中一个范围值,这意味着什么?

var mainApp = angular.module("mainApp", []);
mainApp.directive('modalView',function(){
  return{
     restrict:'E',
     scope:'@' OR scope:'&' OR scope:'=' OR scope:'>' OR scope:true
  }
});
Run Code Online (Sandbox Code Playgroud)

我们究竟在这里做什么?

我也不确定官方文件中是否存在"范围:'>'".它已在我的项目中使用.

编辑-1

使用"scope:'>'"是我项目中的一个问题,并且已经修复.

angularjs angularjs-directive angularjs-scope

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

AngularJs:重新加载页面

<a ng-href="#" class="navbar-brand" title="home" data-translate>PORTAL_NAME</a>
Run Code Online (Sandbox Code Playgroud)

我想重新加载页面.我怎样才能做到这一点?

angularjs angularjs-scope

130
推荐指数
6
解决办法
37万
查看次数

AngularJS从js函数外部访问范围

我试图通过外部javascript函数(与目标控制器完全无关)来查看是否有一种简单的方法来访问控制器的内部范围

我在这里看到了其他几个问题

angular.element("#scope").scope();

将从DOM元素中检索范围,但我的尝试目前没有产生适当的结果.

这是jsfiddle:http://jsfiddle.net/sXkjc/5/

我目前正在经历从普通JS到Angular的过渡.我试图实现这一目标的主要原因是尽可能保持原始库代码的完整性; 无需我将每个功能添加到控制器.

关于如何实现这一目标的任何想法?对上述小提琴的评论也很受欢迎.

angularjs angularjs-scope

129
推荐指数
5
解决办法
17万
查看次数

控制器不是一个功能,未定义,同时全局定义控制器

我正在使用angularjs编写示例应用程序.我在chrome浏览器上遇到了下面提到的错误.

错误是

错误:[ng:areq] http://errors.angularjs.org/1.3.0-beta.17/ng/areq?p0=ContactController&p1=not%20a%20function%2C%20got%20undefined

其中呈现为

参数'ContactController'不是函数,未定义

<!DOCTYPE html>
<html ng-app>
<head>
    <script src="../angular.min.js"></script>
    <script type="text/javascript">
        function ContactController($scope) {
            $scope.contacts = ["abcd@gmail.com", "abcd@yahoo.co.in"];

            $scope.add = function() {
                $scope.contacts.push($scope.newcontact);
                $scope.newcontact = "";                 
            };
        }    
    </script>    
</head>

<body>    
    <h1>  modules sample </h1>

    <div ng-controller="ContactController">
        Email:<input type="text" ng-model="newcontact">
        <button ng-click="add()">Add</button>

        <h2> Contacts </h2>
        <ul>
            <li ng-repeat="contact in contacts"> {{contact}} </li>
        </ul>    
    </div>
</body> 
</html>
Run Code Online (Sandbox Code Playgroud)

javascript angularjs angularjs-directive angularjs-scope

123
推荐指数
4
解决办法
12万
查看次数

如何在AngularJS中进行双向过滤?

AngularJS可以做的一件有趣的事情是将过滤器应用于特定的数据绑定表达式,这是一种应用的便捷方式,例如,特定于文化的货币或模型属性的日期格式.在范围上计算属性也很好.问题是这些功能都不适用于双向数据绑定方案 - 只是从范围到视图的单向数据绑定.这在一个优秀的图书馆中似乎是一个明显的遗漏 - 或者我错过了什么?

KnockoutJS中,我可以创建一个读/写计算属性,它允许我指定一对函数,一个被调用以获取属性的值,另一个在设置属性时被调用.这允许我实现,例如,文化感知输入 - 让用户键入"$ 1.24"并将其解析为ViewModel中的浮点数,并在输入中反映ViewModel中的更改.

我能找到的最接近的东西是使用$scope.$watch(propertyName, functionOrNGExpression);这个允许我在$scope更改属性时调用一个函数.但这并不能解决例如文化意识的输入问题.当我尝试$watched$watch方法本身中修改属性时,请注意问题:

$scope.$watch("property", function (newValue, oldValue) {
    $scope.outputMessage = "oldValue: " + oldValue + " newValue: " + newValue;
    $scope.property = Globalize.parseFloat(newValue);
});
Run Code Online (Sandbox Code Playgroud)

(http://jsfiddle.net/gyZH8/2/)

当用户开始输入时,输入元素变得非常混乱.我通过将属性拆分为两个属性来改进它,一个用于未解析的值,另一个用于解析的值:

$scope.visibleProperty= 0.0;
$scope.hiddenProperty = 0.0;
$scope.$watch("visibleProperty", function (newValue, oldValue) {
    $scope.outputMessage = "oldValue: " + oldValue + " newValue: " + newValue;
    $scope.hiddenProperty = Globalize.parseFloat(newValue);
});
Run Code Online (Sandbox Code Playgroud)

(http://jsfiddle.net/XkPNv/1/)

这是对第一个版本的改进,但是有点冗长,并注意到parsedValue范围更改的属性仍然存在问题(在第二个输入中键入内容,parsedValue直接更改.注意顶部输入不更新).这可能发生在控制器操作或从数据服务加载数据. …

javascript data-binding angularjs angularjs-scope

122
推荐指数
1
解决办法
4万
查看次数