相关疑难解决方法(0)

AngularJS - 为什么使用"Controller as vm"?

这整个周末,我很困扰,不理解为什么父控制器的功能没有被子控制器识别.

我很快意识到将控制器作为vm是原因:

 <div data-ng-controller="ParentCtrl as vm">
   <div data-ng-controller="Child1 as vm"></div>
   <div data-ng-controller="Child2 as vm"></div>
 </div>
Run Code Online (Sandbox Code Playgroud)

当然,现在看来很明显,child1和2都不会在ParentCtrl中看到函数,如果我使用了之前没有vm的工作模式,而是使用$ scope,那么一切都会好的.

所以我的问题是"使用"vm"方法对任何人都有什么好处,如果它优于不使用它,怎么能在ParentCtrl中调用函数调用而不是发出?

谢谢

angularjs

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

为什么在检查$ pristine或$ setDirty()时在ng-include中形成undefined?

当我单击"检查"按钮时,以下代码抛出错误"TypeError:无法读取属性'$ pristine'的undefined".

app.controller('MainCtrl', function($scope) {
  // other stuff
})

.controller('Ctrl2', function($scope) {
  $scope.product = {description:'pump'};
  $scope.output = 'unknown';
  // uncomment to avoid undefined error, still can't see $pristine
  // $scope.formHolder = {};
  $scope.checkForm = function() {
    $scope.descriptionTest = $scope.product.description;
    if ($scope.formHolder.productForm.$pristine) {
      $scope.output = 'yes';
    }
    if ($scope.formHolder.productForm.$dirty) {
      $scope.output = 'no' 
    }
  }
});
Run Code Online (Sandbox Code Playgroud)

HTML

  <body ng-controller="MainCtrl">
    <div >
      <ng-include ng-controller="Ctrl2" src="'myForm.html'"></ng-include>
    </div>
  </body>
Run Code Online (Sandbox Code Playgroud)

myForm.html

<form name="productForm" novalidate>
  <h2>myForm</h2>
  description: <input type="text" name="description" ng-model="product.description"/>
  <br>
  <button ng-click="checkForm()">Check Form</button>
  <br> …
Run Code Online (Sandbox Code Playgroud)

angularjs angularjs-ng-include

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

使用ui路由器进行范围和控制器实例化

我很困惑控制器何时实例化.此外,嵌套状态时控制器如何实例化.我可能会对范围如何附加到视图和控制器感到困惑,也就是说,如果每个视图都有自己的控制器和范围,或者它们共享相同的范围.

有人可以解释控制器何时实例化?在嵌套路由下,所有视图共享一个控制器和范围吗?当我切换状态并返回状态会发生另一个控制器实例化时会发生什么?

以下是我的路线(配置文件):

.config (googleAnalyticsCordovaProvider, $stateProvider, $urlRouterProvider, IdleProvider, KeepaliveProvider) ->

   $stateProvider

  .state('app', {
    url: '/app',
    abstract: true,
    templateUrl: 'templates/menu.html',
    controller: 'AppController'
  })

  .state('app.pincode', {
    url: '/pincode',
    views: {
      menuContent: {
        templateUrl: 'templates/pincode-yield.html',
        controller: 'PincodeController'
      }
    }
  })

  .state('app.pincode.create', {
    url: '/create',
    views: {
      pincode: {
        templateUrl: 'templates/pincode-create.html',
        controller: 'PincodeController'
      }
    }
  })

  .state('app.pincode.pincodeLogin', {
    url: '/login',
    views: {
     pincode: {
        templateUrl: 'templates/pincode-login.html',
        controller: 'PincodeController'
      }
    }
  })

  .state('app.pincode.settings', {
    url: '/settings',
    views: {
      pincode: {
        templateUrl: 'templates/settings.html',
        controller: 'PincodeController'
      } …
Run Code Online (Sandbox Code Playgroud)

angularjs angularjs-scope angularjs-routing angular-ui-router

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

AngularJS:何时将$ scope变量传递给function

我正在使用TodoMVC应用程序来改进AngularJS框架.在第14-16行的index.html中,您会看到:

<form id="todo-form" ng-submit="addTodo()">
    <input id="new-todo" placeholder="What needs to be done?" ng-model="newTodo" autofocus>
</form>
Run Code Online (Sandbox Code Playgroud)

请注意ng-submit指令如何在不将newTodo模型作为参数传递的情况下调用addTodo()函数.

不久之后,我在第19行的同一个文件中遇到了以下代码:

<input id="toggle-all" type="checkbox" ng-model="allChecked" ng-click="markAll(allChecked)">
Run Code Online (Sandbox Code Playgroud)

您可以看到作者此次决定将allChecked模型传递给markAll()函数.如果我理解正确,他们可以在控制器中引用$ scope.allChecked而不是传入它.

为什么在同一个文件中使用两种不同的方法?在某些情况下,一种方法更好吗?这是一个不一致的情况还是使用了更深层次的逻辑?

javascript angularjs

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

ng-repeat中的AngularJS ng-model $范围未定义

如果我没有正确措辞,我会提前道歉.我有一个ng-model内部文本框,ng-repeat当我尝试获取文本框值时,它始终是undefined.我只是希望它显示我在相应文本框中输入的内容.

它似乎是一个问题$scope,所以我如何使$scope.postText全局或控制器根级别,以便它可以访问?

这是帮助清理的JSFiddle:http://jsfiddle.net/stevenng/9mx9B/14/

angularjs

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

AngularJS ng-if和范围

我试图了解ng-if和范围.据我所知,ng-if创建了一个新的子范围.这是我的问题:

视图

<input ng-model="someValue1" />
<div ng-if="!someCondition">
    <input ng-model="$parent.someValue2" />
</div>
Run Code Online (Sandbox Code Playgroud)

调节器

$scope.someCondition = true;

if ($scope.someCondition) {
    $scope.someValue2 = $scope.someValue1;        
}
Run Code Online (Sandbox Code Playgroud)

如果someCondition设置为true,则someValue2应与someValue1相同.

我的问题是我无法在两种情况下访问someValue2(true或false).我怎么能实现这个目标?

angularjs angular-ng-if

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

如何使用angularJS正确绑定指令和控制器之间的范围

我正在尝试使用anugularJS生成一个n级分层无序列表,并且已经能够成功完成.但是现在,我在指令和控制器之间存在范围问题.我需要在指令模板中通过ng-click调用的函数中更改父类的scope属性.

请参阅http://jsfiddle.net/ahonaker/ADukg/2046/ - 这是JS

var app = angular.module('myApp', []);

//myApp.directive('myDirective', function() {});
//myApp.factory('myService', function() {});

function MyCtrl($scope) {
    $scope.itemselected = "None";
    $scope.organizations = {
        "_id": "SEC Power Generation",
        "Entity": "OPUNITS",
        "EntityIDAttribute": "OPUNIT_SEQ_ID",
        "EntityID": 2,
        "descendants": ["Eastern Conf Business Unit", "Western Conf Business Unit", "Atlanta", "Sewanee"],
        children: [{
            "_id": "Eastern Conf Business Unit",
            "Entity": "",
            "EntityIDAttribute": "",
            "EntityID": null,
            "parent": "SEC Power Generation",
            "descendants": ["Lexington", "Columbia", "Knoxville", "Nashville"],
            children: [{
                "_id": "Lexington",
                "Entity": "OPUNITS",
                "EntityIDAttribute": "OPUNIT_SEQ_ID",
                "EntityID": 10,
                "parent": "Eastern …
Run Code Online (Sandbox Code Playgroud)

scope using-directives hierarchy angularjs

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

如何为angularjs中的ng-model动态赋值?

在这里,我使用ng-repeateg 动态生成一个html元素

<div ng-repeat="type in types">
    <input  type="checkbox" ng-model="{{type}}" />{{ type }}
</div>
Run Code Online (Sandbox Code Playgroud)

我想设置ng-model的类型值.是否有可能,或者我想为这样的ng-true-value设置该类型值

<div ng-repeat="type in types">
    <input  type="checkbox" ng-model="{{type}}" ng-true-value="{{type}}" />{{ type }}
</div>
Run Code Online (Sandbox Code Playgroud)

angularjs

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

如何在子范围内的指令中设置角度控制器对象属性值

我在ng-repeater中有一个指令应该设置一个范围属性.请看这里的小提琴:http://jsfiddle.net/paos/CSbRB/

问题是scope属性是作为属性值给出的,如下所示:

<button ng-update1="inputdata.title">click me</button>
Run Code Online (Sandbox Code Playgroud)

该指令应该将scope属性inputdata.title设置为某个字符串.这不起作用:

app.directive('ngUpdate1', function() {
    return function(scope, element, attrs) {
        element.bind('click', function() {
            scope.$apply(function() {
                scope[ attrs.ngUpdate1 ] = "Button 1";
            });
        });
    };
});
Run Code Online (Sandbox Code Playgroud)

但是,直接分配工作:

scope["inputdata"]["title"] = "Button 1";
Run Code Online (Sandbox Code Playgroud)

你能告诉我如何设置范围属性吗?指令中的符号表示法?

PS:小提琴使用转发器的原因是因为它使指令在子范围内.当它们位于子作用域中时,您无法写入作为基元的作用域属性.这就是为什么我需要一个带有"."的对象属性.在名字里.请参阅此处的详细解释:AngularJS中范围原型/原型继承的细微差别是什么?

谢谢

javascript angularjs

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

AngularJS:在ng-repeat生成的范围中设置变量

如何访问ng-repeat生成的范围集?

我认为这个问题的核心是我不明白这种关系如何在a)传递给ng-repeat指令的对象集合和b)它生成的作用域集合之间起作用.我可以玩(a),ng-repeat范围观察和拾取,但我如何设置范围本身的变量(b)?

我的用例是我有一组使用ng-repeat重复的元素,每个元素都有一个使用ng-show/ng-hide切换的编辑视图; 每个元素的状态保存在本地范围的变量中.我希望能够在特定元素上触发ng-show,但是我希望从ng-repeat 外部调用触发器,因此我需要能够访问本地范围变量.

任何人都可以指出我正确的方向(或告诉我,如果我正在吠叫错误的树)?

谢谢

更新: 下面的链接非常有用,谢天谢地.最后,我为每个重复元素创建了一个指令,并使用该指令的link函数将其作用域添加到根作用域的集合中.

angularjs angularjs-scope angularjs-ng-repeat

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