相关疑难解决方法(0)

将变量传递给AngularJS控制器,最佳实践?

我是AngularJS的新手,就像我到目前为止看到的那样,特别是模型/视图绑定.我想利用它来构建一个简单的"添加到篮子"功能.

到目前为止这是我的控制器:

function BasketController($scope) {
    $scope.products = [];

    $scope.AddToBasket = function (Id, name, price, image) {

        ...

    };
}
Run Code Online (Sandbox Code Playgroud)

这是我的HTML:

<a ng-click="AddToBasket('237', 'Laptop', '499.95', '237.png')">Add to basket</a>
Run Code Online (Sandbox Code Playgroud)

现在这可行但我非常怀疑这是在我的模型中创建新产品对象的正确方法.然而,这是我完全缺乏AngularJS体验的地方.

如果不是这样做的话,最佳做法是什么?

javascript javascript-framework angularjs

69
推荐指数
2
解决办法
13万
查看次数

在控制器之间传递数据

我说要学习AngularJS,来自很多不同的MV*框架.我喜欢这个框架,但是我在控制器之间传递数据时遇到了麻烦.

假设我有一个带有一些输入(input.html)和控制器的屏幕,让我们说InputCtrl.
此视图上有一个按钮,可以将您带到另一个屏幕,让我们说使用控制器ApproveCtrl批准(approve.html).
此ApproveCtrl需要来自InputCtrl的数据.这似乎是更大的应用程序中非常常见的情况.

在我以前的MV*框架中,这将像(伪代码)一样处理:

   var self = this;
   onClick = function() {
          var approveCtrl = DI.resolve(ApproveCtrl);
          approveCtrl.property1 = self.property1;
          approveCtrl.property1 = self.property2;
          self.router.show(approveCtrl);  
   }            
Run Code Online (Sandbox Code Playgroud)
  • 它会像Controller一样工作.您首先创建控制器,有机会将其置于正确的状态; 然后创建视图.

现在,在AngularJS中,我正在处理这个:

 var self = this;
 onClick = function(){
          self.$locationService.path('approve');       
 }
Run Code Online (Sandbox Code Playgroud)
  • 这就像View-first一样.您说要导航到哪个视图/路径,Controller由框架创建.

我发现很难控制创建的Controller的状态并将数据传递给它.我已经看过并尝试过以下方法,但在我看来,所有这些都有自己的问题:

  1. 将共享服务注入InputCtrl和ApproveCtrl,并将所有数据放在此服务上共享
    • 这看起来像是一个肮脏的解决方法; 共享服务中的状态变为全局状态,而我只需要它将数据传递给ApproveCtrl
    • 这个共享服务的生命周期比我需要的时间长 - 只是为了将数据传递给ApproveCtrl
  2. 传递$ routeParams中的数据
    • 传递大量参数时,这会变得非常混乱
  3. 使用$ scope事件
    • 从概念上讲,这不是我会使用事件的东西 - 我只需要将数据传递给ApproveCtrl,没有任何事件是什么
    • 这非常麻烦; 我必须首先向父母发送一个事件,然后将其广播给它的孩子

我在这里错过了什么吗?我创造了太多小型控制器吗?我是否试图在这里过多地保留其他框架的习惯?

angularjs

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

AngularJS服务在控制器之间传递数据

当使用AngularJS服务尝试在两个控制器之间传递数据时,我的第二个控制器在尝试从服务访问数据时总是收到未定义的.我猜这是因为第一个服务执行$ window.location.href并且我认为这是清除服务中的数据?有没有办法让我将URL更改为新位置,并将数据保留在第二个控制器的服务中?当我运行下面的代码时,第二个控制器中的警报始终是未定义的.

app.js(定义服务的地方)

var app = angular.module('SetTrackerApp', ['$strap.directives', 'ngCookies']);

app.config(function ($routeProvider) 
{
$routeProvider
  .when('/app', {templateUrl: 'partials/addset.html', controller:'SetController'})
  .when('/profile', {templateUrl: 'partials/profile.html', controller:'ProfileController'})
  .otherwise({templateUrl: '/partials/addset.html', controller:'SetController'});
});

app.factory('userService', function() {
var userData = [
    {yearSetCount: 0}
];

return {
    user:function() {
        return userData;
    },
    setEmail: function(email) {
        userData.email = email;
    },
    getEmail: function() {
        return userData.email;
    },
    setSetCount: function(setCount) {
        userData.yearSetCount = setCount;
    },
    getSetCount: function() {
        return userData.yearSetCount;
    }
};
});
Run Code Online (Sandbox Code Playgroud)

logincontroller.js :(控制器1在服务中设置值)

    app.controller('LoginController', function ($scope, $http, $window, userService) {

$scope.login …
Run Code Online (Sandbox Code Playgroud)

angularjs angularjs-service

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

如何访问ng-view之外的范围

在导航栏上,我有一个使用的购物车快照(总项目,总价格)$scope.cart.

ng-view,有一些页面可以添加/删除购物车中的项目.

它似乎ng-view创建了一个孤立的范围.如果我添加项目$scope.cart,它将转到属于的范围ng-view.如何ng-view共享父范围?

angularjs

6
推荐指数
1
解决办法
2637
查看次数

如何在$ state angularjs中的控制器之间使用ui路由器传递对象

我正在使用这台发电机.

我有我的用户模块:

require('angular/angular');
require('angular-ui-router');


angular.module('userModule', ['ui.router'])
    .config(['$stateProvider', function($stateProvider) {


    $stateProvider
        .state('utenti', {
            url: '/utenti',
            templateUrl: 'src/utenti/views/utenti.tpl.html',
            controller: 'RegistrationCrl',    
        })

        .state('access', {
            url: '/access',
            templateUrl: 'src/utenti/views/access.tpl.html',
            controller: 'AccessCtrl',
        });


}])
.controller('RegistrationCrl', require('./controllers/registrationLogin'))
.controller('AccessCtrl', require('./controllers/access'));
Run Code Online (Sandbox Code Playgroud)

在我的RegistrationCrl中,我使用服务来创建一个新成员:

module.exports = function($scope, User, Member, $state, $location,$rootScope, $stateParams){
        $scope.registration = function(form){
            if(!form.$valid ){
                console.log('input error');
                return;
            }
            else{
                console.log('valid form');

                Member.create($scope.newMember,
                    function(data){
                        $state.go('access', data); 
                    },
                    function(data){
                        console.log(data);
                    }
                );

            }
        };
    };
Run Code Online (Sandbox Code Playgroud)

我想在下一个与accessCtl相关的视图中使用该数据.我不想在我的URL中使用id并使用$ stateParams.

我的访问控制器是:

module.exports =  function($scope, User, Member, $state, $rootScope, $stateParams){
        console.log($state); …
Run Code Online (Sandbox Code Playgroud)

angularjs angular-ui-router

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